You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by tj...@apache.org on 2019/07/08 16:36:54 UTC

svn commit: r1862759 - in /felix/trunk/scr/src/main/java/org/apache/felix/scr/impl: Activator.java metadata/MetadataStoreHelper.java

Author: tjwatson
Date: Mon Jul  8 16:36:54 2019
New Revision: 1862759

URL: http://svn.apache.org/viewvc?rev=1862759&view=rev
Log:
FELIX-6155 - Add version to metadata store file

If the stored version is not the current version
of the implementation then the cached metadata is
ignored.

Modified:
    felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/Activator.java
    felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/metadata/MetadataStoreHelper.java

Modified: felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/Activator.java
URL: http://svn.apache.org/viewvc/felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/Activator.java?rev=1862759&r1=1862758&r2=1862759&view=diff
==============================================================================
--- felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/Activator.java (original)
+++ felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/Activator.java Mon Jul  8 16:36:54 2019
@@ -241,6 +241,11 @@ public class Activator extends AbstractE
                     new BufferedInputStream(new FileInputStream(store))))
                 {
                     MetaDataReader metaDataReader = new MetaDataReader();
+                    if (!metaDataReader.isVersionSupported(in))
+                    {
+                        // the stored version is not compatible
+                        return result;
+                    }
                     int numStrings = in.readInt();
                     for (int i = 0; i < numStrings; i++)
                     {
@@ -302,6 +307,7 @@ public class Activator extends AbstractE
             new BufferedOutputStream(new FileOutputStream(store))))
         {
             MetaDataWriter metaDataWriter = new MetaDataWriter();
+            metaDataWriter.writeVersion(out);
 
             Set<String> allStrings = new HashSet<>();
             for (List<ComponentMetadata> components : componentsMap.values())

Modified: felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/metadata/MetadataStoreHelper.java
URL: http://svn.apache.org/viewvc/felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/metadata/MetadataStoreHelper.java?rev=1862759&r1=1862758&r2=1862759&view=diff
==============================================================================
--- felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/metadata/MetadataStoreHelper.java (original)
+++ felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/metadata/MetadataStoreHelper.java Mon Jul  8 16:36:54 2019
@@ -29,6 +29,10 @@ import java.util.Set;
 
 public class MetadataStoreHelper
 {
+    // The version of the component metadata store.  If the
+    // stored metadata is not this version then the cache is ignored
+    static final int STORE_VERSION = 1;
+
     static final byte STRING_NULL = 0;
     static final byte STRING_OBJECT = 1;
     static final byte STRING_INDEX = 2;
@@ -38,6 +42,11 @@ public class MetadataStoreHelper
     {
         private final List<String> stringTable = new ArrayList<String>();
 
+        public boolean isVersionSupported(DataInputStream in) throws IOException
+        {
+            return STORE_VERSION == in.readInt();
+        }
+
         public String readIndexedString(DataInputStream in) throws IOException
         {
             String s = readString(in);
@@ -97,6 +106,11 @@ public class MetadataStoreHelper
     {
         private final Map<String, Integer> stringTable = new HashMap<>();
 
+        public void writeVersion(DataOutputStream out) throws IOException
+        {
+            out.writeInt(STORE_VERSION);
+        }
+
         public void writeIndexedString(String s, DataOutputStream out) throws IOException
         {
             writeString(s, out);