[ https://issues.apache.org/jira/browse/GORA-698?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17599999#comment-17599999 ]
ASF GitHub Bot commented on GORA-698: ------------------------------------- kamaci commented on code in PR #273: URL: https://github.com/apache/gora/pull/273#discussion_r962204734 ########## gora-geode/src/main/java/org/apache/gora/geode/store/GeodeStore.java: ########## @@ -0,0 +1,190 @@ +package org.apache.gora.geode.store; + +import org.apache.geode.cache.*; +import org.apache.geode.cache.client.ClientCache; +import org.apache.geode.cache.client.ClientCacheFactory; +import org.apache.gora.geode.query.GeodeQuery; +import org.apache.gora.geode.query.GeodeResult; +import org.apache.gora.persistency.impl.PersistentBase; +import org.apache.gora.query.PartitionQuery; +import org.apache.gora.query.Query; +import org.apache.gora.query.Result; +import org.apache.gora.query.impl.PartitionQueryImpl; +import org.apache.gora.store.impl.DataStoreBase; +import org.apache.gora.util.GoraException; + +import java.io.IOException; +import java.util.*; +import java.util.concurrent.ConcurrentSkipListSet; + +import static org.apache.geode.cache.RegionShortcut.REPLICATE; +import static org.apache.gora.geode.store.GeodeStoreParameters.*; + + +public class GeodeStore<K, T extends PersistentBase> extends DataStoreBase<K, T> { + + private ClientCache clientCache; + private Region<K, T> region; + private Properties geodeProperties; + + + private CacheFactory cacheFactory; + + @Override + public void initialize(Class<K> keyClass, Class<T> persistentClass, Properties properties) throws GoraException { + super.initialize(keyClass, persistentClass, properties); + String geodeHostName = (String) properties.get(GEODE_SERVER_HOST); + int portNumber = Integer.parseInt((String) properties.get(GEODE_SERVER_PORT)); + clientCache = new ClientCacheFactory().addPoolLocator(geodeHostName, portNumber).create(); + String userName = properties.getProperty(GEODE_USERNAME); + String password = properties.getProperty(GEODE_PASSWORD); + geodeProperties = properties; + + Properties clientProperties = clientCache.getDistributedSystem().getProperties(); + if (userName != null) { + clientProperties.setProperty("security-username", userName); + clientProperties.setProperty("security-password", password); + } + cacheFactory = new CacheFactory(clientProperties); + } + + @Override + /* + Schema Name can be assigned via Property file using @PREFERRED_SCHEMA_NAME, or else PersistentClass name is used as the default schema name. + */ + public String getSchemaName() { + String preferredSchemaName = properties.getProperty(PREFERRED_SCHEMA_NAME); + if (preferredSchemaName == null) { + return persistentClass.getSimpleName(); + } + return preferredSchemaName; + } + + @Override + public void createSchema() throws GoraException { + try { + Cache cache = cacheFactory.create(); + String regionShortCut = geodeProperties.getProperty(GEODE_REGION_SHORTCUT); + RegionFactory<K,T> regionFactory; + if (regionShortCut != null) { + regionFactory = cache.createRegionFactory(RegionShortcut.valueOf(regionShortCut)); + } else { + regionFactory = cache.createRegionFactory(REPLICATE); + } + region = regionFactory.create(getSchemaName()); + } catch (Exception e) { + throw new GoraException(e); + } + } + + @Override + public void deleteSchema() { + region.destroyRegion(); + } + + @Override + public boolean schemaExists() { + Properties properties = clientCache.getDistributedSystem().getProperties(); + CacheFactory factory = new CacheFactory(properties); + Cache cache = factory.create(); + Region<K, T> rf = cache.getRegion(getSchemaName()); + return rf != null; + } + + @Override + public boolean exists(K key) { + for (K existingKey : region.getInterestList()) { + if (existingKey.equals(key)) { + return true; + } + } + return false; + } + + @Override + public T get(K key, String[] fields) { + return region.get(key); + } + + @Override + public void put(K key, T obj) { + region.put(key, obj); + } + + @Override + public boolean delete(K key) { + region.destroy(key); + return true; + } + + @Override + public long deleteByQuery(Query<K, T> query) throws GoraException { + try { + long deletedRows = 0; + Result<K, T> result = query.execute(); + while (result.next()) { + if (delete(result.getKey())) { + deletedRows++; + } + } + LOG.info("Geode datastore deleted {} rows from Persistent datastore.", deletedRows); + return deletedRows; + } catch (Exception e) { + throw new GoraException(e); + } + } + + @Override + public Result<K, T> execute(Query<K, T> query) { + Review Comment: remove extra space > Add GEODE Support > ----------------- > > Key: GORA-698 > URL: https://issues.apache.org/jira/browse/GORA-698 > Project: Apache Gora > Issue Type: New Feature > Reporter: Himanshu > Priority: Major > > [1]https://geode.apache.org/ -- This message was sent by Atlassian Jira (v8.20.10#820010)