Fixes toward bug #248:

* Bug fix: Don't delete the Flow entries while processing the list
  of all Flow entries. Instead, add them to a list, and process
  that list after all other processing is done.

* Add a workaround when encountering some bogus Flow Entry
  entries from the database. Apparatenly, sometimes the
  Flow Entries obtained by the getAllFlowEntries() method
  are bogus. E.g., the object is non-null, but fetching (some of)
  its attributes returns null pointers. Those attributes
  (e.g., Flow Entry ID) should always be set.
  This seems to happen only with multiple ONOS instances running:
   - 100 flows are installed
   - The flows are deleted (or "cleared") by using the web/delete_flow.py
     or web/clear_flow.py scripts.
   - While the flows are in the process of deletion/cleanip,
     the periodic mapReader() thread on some of the remote ONOS instances
     shows tens of bogus Flow Entries. If mapReader() ignores
     those entries, on the next iteration (after 3 seconds or so)
     the entries are not there.
  As a work-around, for now the bogus (i.e., with null attributes)
  flow entries are ignored. A separate bug will be opened to trace
  the more generic problem: why the database objects are bogus.
1 file changed