Hi Beau, 
     
    I think that this issue has been fixed with some of our recent
    refactoring. The following pseudo-code worked for me against a local
    accumulo mini-cluster. Could you try your test again with the latest
    branch? (note, you might need to pull a PR that hasn't been merged
    yet that fixes a bug in deleting:
    https://github.com/locationtech/geomesa/pull/141) 
     
    Thanks, 
     
    Emilio 
     
     
      void deleteThenAdd() { 
          DataStore dataStore = DataStoreFinder.getDataStore(params); 
          SimpleFeatureStore featureStore = (SimpleFeatureStore)
    dataStore.getFeatureSource(sftName); 
     
          String filterString = "..."; 
          Filter filter = CQL.toFilter(filterString); 
     
          Query query = new Query(sftName, filter); 
     
          // query returns a single feature 
          SimpleFeature feature = this.query(featureStore, query); 
     
          logger.info("removing feature"); 
          featureStore.removeFeatures(filter); 
     
          // this query returns 0 features 
          this.query(featureStore, query); 
     
          logger.info("re-adding feature"); 
     
          DefaultFeatureCollection featureCollection = new
    DefaultFeatureCollection(sftName, feature.getFeatureType); 
          feature.getUserData.put(Hints.USE_PROVIDED_FID, true); 
          featureCollection.add(feature); 
     
          featureStore.addFeatures(featureCollection); 
     
          // returns the single feature again 
          this.query(featureStore, query); 
      } 
     
      SimpleFeature query(SimpleFeatureStore featureStore, Query query)
    { 
        int count = 0 
        SimpleFeature first = null 
     
        // execute the query 
        SimpleFeatureIterator features =
    featureStore.getFeatures(query).features(); 
        while (features.hasNext()) { 
          count = count + 1; 
          if (first == null) { 
            first = features.next(); 
          } else { 
            features.next(); 
          } 
        } 
        logger.info("queried " + count + " features"); 
        return first 
      } 
     
    On 07/21/2014 01:14 PM, Beau Lalonde
      wrote: 
     
    
      
      Anthony, 
      Thanks for the reply. 
      In my test and also in our real system we have
        witnessed this problem writing to accumulo from a single client
        (not using a map-reduce job).  I should mention that accumulo is
        not on the same machine as the client that we are using to
        write. 
       
      In our real system I am confident that there is
        elapsed system time between the remove and add calls - in our
        junit test (partial code in original post), there might not be
        much elapsed time because of the simplicity of the test. 
      Thanks for your help, 
      Beau 
       
      Sent from my mobile device. 
      
      
        
          Beau, 
             
           
          Yes, you definitely can add/remove/add without problems in
          Accumulo.  The only time you cannot do it without strange
          behaviour is if you set the timestamp exactly the same for
          each 'add'.  GeoMesa does not explicitly set the timestamp, so
          it should get the current system time for each mutation.  Can
          you tell me a bit more about how you are writing to GeoMesa? 
          Is it from the same client (with consistent system time) each
          time or is it from within a map-reduce job?  If the latter, do
          you have ntpd setup to synchronize system time?  I'll put
          together a test to see if we can reproduce your issue.
           
          Thanks, 
          Anthony
          
        
       
       
      
       
      _______________________________________________
geomesa-users mailing list
geomesa-users@xxxxxxxxxxxxxxxx
To change your delivery options, retrieve your password, or unsubscribe from this list, visit
http://www.locationtech.org/mailman/listinfo/geomesa-users 
     
     
  
 |