@Override public void addSchema(PSchema schema) throws SQLException { this.metaData.addSchema(schema); }
@Override public void addTable(PTable table, long resolvedTime) throws SQLException { metaData.addTable(table, resolvedTime); }
@Override public PMetaData clone() { readWriteLock.readLock().lock(); try { return delegate.clone(); } finally { readWriteLock.readLock().unlock(); } }
@Test public void testSchema() throws Exception { TestTimeKeeper timeKeeper = new TestTimeKeeper(); PMetaData metaData = new PMetaDataImpl(5, timeKeeper, new ReadOnlyProps(Collections.EMPTY_MAP)); PSchema schema = new PSchema("testSchema"); metaData.addSchema(schema); assertEquals(schema, metaData.getSchema(schema.getSchemaKey())); metaData.removeSchema(schema, schema.getTimeStamp()); try { metaData.getSchema(schema.getSchemaKey()); fail("the schema should be removed"); } catch (SchemaNotFoundException e) { } }
public PTableRef getTableRef(PTableKey key) throws TableNotFoundException { return metaData.getTableRef(key); }
@Override public void removeSchema(PSchema schema, long schemaTimeStamp) { metaData.removeSchema(schema, schemaTimeStamp); }
public PSchema getSchema(PTableKey key) throws SchemaNotFoundException { return metaData.getSchema(key); }
@Override public void removeTable(PName tenantId, String tableName, String parentTableName, long tableTimeStamp) throws SQLException { metaData.removeTable(tenantId, tableName, parentTableName, tableTimeStamp); }
maxSizeBytes) : new MutationState(mutationState); this.metaData = metaData; this.metaData.pruneTables(pruner); this.metaData.pruneFunctions(pruner); this.services.addConnection(this);
@Override public void addTable(PTable table, long resolvedTime) throws SQLException { synchronized (latestMetaDataLock) { try { throwConnectionClosedIfNullMetaData(); // If existing table isn't older than new table, don't replace // If a client opens a connection at an earlier timestamp, this can happen PTable existingTable = latestMetaData.getTableRef(new PTableKey(table.getTenantId(), table.getName().getString())).getTable(); if (existingTable.getTimeStamp() >= table.getTimeStamp()) { return; } } catch (TableNotFoundException e) {} latestMetaData.addTable(table, resolvedTime); latestMetaDataLock.notifyAll(); } } @Override
try { try { table = metaData.getTableRef(new PTableKey(tenantId, tableName)).getTable(); metaData.removeTable(tenantId, tableName, null, HConstants.LATEST_TIMESTAMP); break;
@Test public void testAge() throws Exception { TestTimeKeeper timeKeeper = new TestTimeKeeper(); Map<String, String> props = Maps.newHashMapWithExpectedSize(2); props.put(QueryServices.MAX_CLIENT_METADATA_CACHE_SIZE_ATTRIB, "10"); props.put(QueryServices.CLIENT_CACHE_ENCODING, "object"); PMetaData metaData = new PMetaDataImpl(5, timeKeeper, new ReadOnlyProps(props)); String tableName = "a"; addToTable(metaData, tableName, 1, timeKeeper); PTableRef aTableRef = metaData.getTableRef(new PTableKey(null,tableName)); assertNotNull(aTableRef); assertEquals(1, metaData.getAge(aTableRef)); tableName = "b"; addToTable(metaData, tableName, 1, timeKeeper); PTableRef bTableRef = metaData.getTableRef(new PTableKey(null,tableName)); assertNotNull(bTableRef); assertEquals(1, metaData.getAge(bTableRef)); assertEquals(2, metaData.getAge(aTableRef)); }
@Override public int size() { readWriteLock.readLock().lock(); try { return delegate.size(); } finally { readWriteLock.readLock().unlock(); } }
@Override public long getAge(PTableRef ref) { readWriteLock.readLock().lock(); try { return delegate.getAge(ref); } finally { readWriteLock.readLock().unlock(); } }
PMetaData metaData = new PMetaDataImpl(5, timeKeeper, new ReadOnlyProps(props)); addToTable(metaData, "a", 5, timeKeeper); assertEquals(1, metaData.size()); addToTable(metaData, "b", 4, timeKeeper); assertEquals(2, metaData.size()); addToTable(metaData, "c", 3, timeKeeper); assertEquals(2, metaData.size()); assertNames(metaData, "b","c"); assertEquals(1, metaData.size()); assertNames(metaData, "b"); assertEquals(1, metaData.size()); assertNames(metaData, "d"); assertEquals(1, metaData.size()); addToTable(metaData, "b", 3, timeKeeper); assertEquals(2, metaData.size()); addToTable(metaData, "c", 2, timeKeeper); assertEquals(3, metaData.size()); assertNames(metaData, "a", "b","c"); assertEquals(3, metaData.size()); assertNames(metaData, "c", "a","d"); metaData = metaData.clone(); addToTable(metaData, "e", 6, timeKeeper); assertEquals(2, metaData.size()); assertNames(metaData, "d","e");
@Override public void pruneTables(Pruner pruner) { readWriteLock.writeLock().lock(); try { delegate.pruneTables(pruner); } finally { readWriteLock.writeLock().unlock(); } }
@Override public PTableRef getTableRef(PTableKey key) throws TableNotFoundException { readWriteLock.readLock().lock(); try { return delegate.getTableRef(key); } finally { readWriteLock.readLock().unlock(); } }
@Override public void removeSchema(PSchema schema, long schemaTimeStamp) { latestMetaData.removeSchema(schema, schemaTimeStamp); }
@Override public PSchema getSchema(PTableKey key) throws SchemaNotFoundException { readWriteLock.readLock().lock(); try { return delegate.getSchema(key); } finally { readWriteLock.readLock().unlock(); } }
@Override public void removeTable(PName tenantId, String tableName, String parentTableName, long tableTimeStamp) throws SQLException { readWriteLock.writeLock().lock(); try { delegate.removeTable(tenantId, tableName, parentTableName, tableTimeStamp); } finally { readWriteLock.writeLock().unlock(); } }