[teiid-commits] teiid SVN: r4326 - in branches/8.1.x/engine/src: test/java/org/teiid/common/buffer and 1 other directory.

teiid-commits at lists.jboss.org teiid-commits at lists.jboss.org
Wed Aug 15 12:15:53 EDT 2012


Author: shawkins
Date: 2012-08-15 12:15:52 -0400 (Wed, 15 Aug 2012)
New Revision: 4326

Modified:
   branches/8.1.x/engine/src/main/java/org/teiid/common/buffer/FileStore.java
   branches/8.1.x/engine/src/main/java/org/teiid/common/buffer/FileStoreInputStreamFactory.java
   branches/8.1.x/engine/src/test/java/org/teiid/common/buffer/TestLobManager.java
Log:
TEIID-2147 fixing the reported storage mode for the filestore lobs

Modified: branches/8.1.x/engine/src/main/java/org/teiid/common/buffer/FileStore.java
===================================================================
--- branches/8.1.x/engine/src/main/java/org/teiid/common/buffer/FileStore.java	2012-08-15 14:51:07 UTC (rev 4325)
+++ branches/8.1.x/engine/src/main/java/org/teiid/common/buffer/FileStore.java	2012-08-15 16:15:52 UTC (rev 4326)
@@ -42,6 +42,7 @@
 		private int count;
 		private boolean bytesWritten;
 		private boolean closed;
+		private byte[] singleByte = new byte[1];
 		
 		public FileStoreOutputStream(int size) {
 			this.buffer = new byte[size];
@@ -49,7 +50,8 @@
 		
 		@Override
 		public void write(int b) throws IOException {
-			write(new byte[b], 0, 1);
+			singleByte[0] = (byte)b;
+			write(singleByte, 0, 1);
 		}
 
 		@Override

Modified: branches/8.1.x/engine/src/main/java/org/teiid/common/buffer/FileStoreInputStreamFactory.java
===================================================================
--- branches/8.1.x/engine/src/main/java/org/teiid/common/buffer/FileStoreInputStreamFactory.java	2012-08-15 14:51:07 UTC (rev 4325)
+++ branches/8.1.x/engine/src/main/java/org/teiid/common/buffer/FileStoreInputStreamFactory.java	2012-08-15 16:15:52 UTC (rev 4326)
@@ -90,12 +90,13 @@
 
 	@Override
 	public void free() throws IOException {
+		fsos = null;
 		lobBuffer.remove();
 	}
 	
 	@Override
 	public StorageMode getStorageMode() {
-		if (fsos == null) {
+		if (fsos == null || fsos.bytesWritten()) {
 			return StorageMode.PERSISTENT;
 		}
 		return StorageMode.MEMORY;

Modified: branches/8.1.x/engine/src/test/java/org/teiid/common/buffer/TestLobManager.java
===================================================================
--- branches/8.1.x/engine/src/test/java/org/teiid/common/buffer/TestLobManager.java	2012-08-15 14:51:07 UTC (rev 4325)
+++ branches/8.1.x/engine/src/test/java/org/teiid/common/buffer/TestLobManager.java	2012-08-15 16:15:52 UTC (rev 4326)
@@ -31,12 +31,14 @@
 import java.util.List;
 
 import org.junit.Test;
+import org.teiid.common.buffer.FileStore.FileStoreOutputStream;
 import org.teiid.common.buffer.LobManager.ReferenceMode;
 import org.teiid.common.buffer.impl.BufferManagerImpl;
 import org.teiid.core.types.BlobImpl;
 import org.teiid.core.types.BlobType;
 import org.teiid.core.types.ClobImpl;
 import org.teiid.core.types.ClobType;
+import org.teiid.core.types.DataTypeManager;
 import org.teiid.core.types.InputStreamFactory;
 import org.teiid.core.types.Streamable;
 import org.teiid.core.util.ObjectConverterUtil;
@@ -65,12 +67,25 @@
 				return new ReaderInputStream(new StringReader("Blob contents Two"),  Charset.forName(Streamable.ENCODING));
 			}
 			
-		}));		
+		}));
 		
-		LobManager lobManager = new LobManager(new int[] {0, 1}, fs);
+		FileStore fs1 = buffMgr.createFileStore("blob");
+		FileStoreInputStreamFactory fsisf = new FileStoreInputStreamFactory(fs1, Streamable.ENCODING);
+		FileStoreOutputStream fsos = fsisf.getOuputStream();
+		byte[] b = new byte[DataTypeManager.MAX_LOB_MEMORY_BYTES + 1];
+		fsos.write(b);
+		fsos.close();
+		BlobType blob1 = new BlobType(new BlobImpl(fsisf));		
+		
+		assertNotNull(blob1.getReferenceStreamId());
+		
+		LobManager lobManager = new LobManager(new int[] {0, 1, 2}, fs);
 		lobManager.setMaxMemoryBytes(4);
-		List<?> tuple = Arrays.asList(clob, blob);
+		List<?> tuple = Arrays.asList(clob, blob, blob1);
 		lobManager.updateReferences(tuple, ReferenceMode.CREATE);
+		
+		assertNotNull(blob1.getReferenceStreamId());
+		
 		lobManager.persist();
 		
 		Streamable<?>lob = lobManager.getLobReference(clob.getReferenceStreamId());



More information about the teiid-commits mailing list