Author: mpetria
Date: Mon Apr 25 14:20:12 2016
New Revision: 1740843
URL: http://svn.apache.org/viewvc?rev=1740843&view=rev
Log:
SLING-5686: pass remote.package.id through package info
Added:
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/transport/impl/DefaultRemoteDistributionPackage.java
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/transport/impl/RemoteDistributionPackage.java
Removed:
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/transport/impl/DefaultDistributionPackageProxy.java
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/transport/impl/DistributionPackageProxy.java
Modified:
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/DistributionPackageUtils.java
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/exporter/RemoteDistributionPackageExporter.java
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/servlet/DistributionPackageExporterServlet.java
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/transport/impl/DistributionTransport.java
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/transport/impl/HttpTransportUtils.java
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/transport/impl/SimpleHttpDistributionTransport.java
sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/transport/impl/SimpleHttpDistributionTransportTest.java
Modified:
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/DistributionPackageUtils.java
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/DistributionPackageUtils.java?rev=1740843&r1=1740842&r2=1740843&view=diff
==============================================================================
---
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/DistributionPackageUtils.java
(original)
+++
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/DistributionPackageUtils.java
Mon Apr 25 14:20:12 2016
@@ -27,6 +27,7 @@ import org.apache.sling.api.resource.Res
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.resource.ResourceUtil;
import org.apache.sling.distribution.DistributionRequest;
+import org.apache.sling.distribution.DistributionRequestType;
import org.apache.sling.distribution.queue.DistributionQueueEntry;
import org.apache.sling.distribution.serialization.DistributionPackage;
import org.apache.sling.distribution.serialization.DistributionPackageInfo;
@@ -48,8 +49,10 @@ import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
+import java.io.InvalidClassException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
+import java.io.ObjectStreamClass;
import java.io.OutputStream;
import java.io.SequenceInputStream;
import java.util.ArrayList;
@@ -72,6 +75,9 @@ public class DistributionPackageUtils {
private static Object filelock = new Object();
+ public final static String PROPERTY_REMOTE_PACKAGE_ID =
"remote.package.id";
+
+
/**
@@ -217,6 +223,7 @@ public class DistributionPackageUtils {
Map<String, Object> headerInfo = new HashMap<String, Object>();
headerInfo.put(DistributionPackageInfo.PROPERTY_REQUEST_TYPE,
packageInfo.getRequestType());
headerInfo.put(DistributionPackageInfo.PROPERTY_REQUEST_PATHS,
packageInfo.getPaths());
+ headerInfo.put(PROPERTY_REMOTE_PACKAGE_ID,
distributionPackage.getId());
writeInfo(outputStream, headerInfo);
InputStream headerStream = new
ByteArrayInputStream(outputStream.toByteArray());
@@ -235,7 +242,8 @@ public class DistributionPackageUtils {
String s = new String(buffer, "UTF-8");
if (bytesRead > 0 && buffer[0] > 0 && META_START.equals(s)) {
- ObjectInputStream stream = new ObjectInputStream(inputStream);
+ ObjectInputStream stream =
getSafeObjectInputStream(inputStream);
+
HashMap<String, Object> map = (HashMap<String, Object>)
stream.readObject();
info.putAll(map);
} else {
@@ -351,7 +359,7 @@ public class DistributionPackageUtils {
HashSet<String> set = new HashSet<String>();
if (file.exists()) {
- ObjectInputStream inputStream = new ObjectInputStream(new
FileInputStream(file));
+ ObjectInputStream inputStream =
getSafeObjectInputStream(new FileInputStream(file));
set = (HashSet<String>) inputStream.readObject();
IOUtils.closeQuietly(inputStream);
}
@@ -382,7 +390,7 @@ public class DistributionPackageUtils {
HashSet<String> set = new HashSet<String>();
if (file.exists()) {
- ObjectInputStream inputStream = new ObjectInputStream(new
FileInputStream(file));
+ ObjectInputStream inputStream =
getSafeObjectInputStream(new FileInputStream(file));
set = (HashSet<String>) inputStream.readObject();
IOUtils.closeQuietly(inputStream);
}
@@ -405,4 +413,32 @@ public class DistributionPackageUtils {
return false;
}
+
+ private static ObjectInputStream getSafeObjectInputStream(InputStream
inputStream) throws IOException {
+
+ final Class[] acceptedClasses = new Class[] {
+ HashMap.class, HashSet.class,
+ String.class, String[].class,
+ Enum.class,
+ DistributionRequestType.class
+ };
+
+ return new ObjectInputStream(inputStream) {
+ @Override
+ protected Class<?> resolveClass(ObjectStreamClass osc) throws
IOException, ClassNotFoundException {
+ String className = osc.getName();
+ for (Class clazz : acceptedClasses) {
+ if (clazz.getName().equals(className)) {
+ return super.resolveClass(osc);
+ }
+ }
+
+ throw new InvalidClassException("Class name not accepted: " +
className);
+ }
+ };
+
+ // TODO: replace with the following lines when switching to
commons-io-2.5
+ // return new ValidatingObjectInputStream(inputStream)
+ // .accept(acceptedClasses);
+ }
}
Modified:
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/exporter/RemoteDistributionPackageExporter.java
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/exporter/RemoteDistributionPackageExporter.java?rev=1740843&r1=1740842&r2=1740843&view=diff
==============================================================================
---
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/exporter/RemoteDistributionPackageExporter.java
(original)
+++
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/exporter/RemoteDistributionPackageExporter.java
Mon Apr 25 14:20:12 2016
@@ -36,7 +36,7 @@ import org.apache.sling.distribution.tra
import
org.apache.sling.distribution.transport.impl.DistributionTransportContext;
import org.apache.sling.distribution.transport.impl.DistributionTransport;
import org.apache.sling.distribution.transport.impl.DistributionEndpoint;
-import org.apache.sling.distribution.transport.impl.DistributionPackageProxy;
+import org.apache.sling.distribution.transport.impl.RemoteDistributionPackage;
import
org.apache.sling.distribution.transport.impl.SimpleHttpDistributionTransport;
/**
@@ -79,7 +79,7 @@ public class RemoteDistributionPackageEx
for (DistributionTransport distributionTransport : transportHandlers) {
int noPackages = 0;
- DistributionPackageProxy retrievedPackage;
+ RemoteDistributionPackage retrievedPackage;
while (noPackages < maxNumberOfPackages && ((retrievedPackage =
distributionTransport.retrievePackage(resourceResolver, distributionRequest,
distributionContext)) != null)) {
@@ -88,7 +88,7 @@ public class RemoteDistributionPackageEx
try {
packageProcessor.process(distributionPackage);
- retrievedPackage.deletePackage();
+ retrievedPackage.deleteRemotePackage();
} finally {
DistributionPackageUtils.closeSafely(distributionPackage);
Modified:
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/servlet/DistributionPackageExporterServlet.java
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/servlet/DistributionPackageExporterServlet.java?rev=1740843&r1=1740842&r2=1740843&view=diff
==============================================================================
---
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/servlet/DistributionPackageExporterServlet.java
(original)
+++
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/servlet/DistributionPackageExporterServlet.java
Mon Apr 25 14:20:12 2016
@@ -102,8 +102,6 @@ public class DistributionPackageExporter
InputStream inputStream = null;
int bytesCopied = -1;
try {
-
response.addHeader(HttpTransportUtils.HEADER_DISTRIBUTION_ORIGINAL_ID,
distributionPackage.getId());
-
inputStream =
DistributionPackageUtils.createStreamWithHeader(distributionPackage);
bytesCopied = IOUtils.copy(inputStream,
response.getOutputStream());
Added:
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/transport/impl/DefaultRemoteDistributionPackage.java
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/transport/impl/DefaultRemoteDistributionPackage.java?rev=1740843&view=auto
==============================================================================
---
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/transport/impl/DefaultRemoteDistributionPackage.java
(added)
+++
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/transport/impl/DefaultRemoteDistributionPackage.java
Mon Apr 25 14:20:12 2016
@@ -0,0 +1,64 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.sling.distribution.transport.impl;
+
+import org.apache.http.client.fluent.Executor;
+import org.apache.sling.distribution.packaging.impl.DistributionPackageUtils;
+import org.apache.sling.distribution.serialization.DistributionPackage;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.IOException;
+import java.net.URI;
+import java.net.URISyntaxException;
+
+
+public class DefaultRemoteDistributionPackage implements
RemoteDistributionPackage {
+ private static final Logger log =
LoggerFactory.getLogger(DefaultRemoteDistributionPackage.class);
+
+
+ private final DistributionPackage wrappedPackage;
+ private final Executor executor;
+ private final URI distributionURI;
+ private final String remoteId;
+
+ public DefaultRemoteDistributionPackage(DistributionPackage
wrappedPackage, Executor executor, URI distributionURI) {
+ this.wrappedPackage = wrappedPackage;
+ this.executor = executor;
+ this.distributionURI = distributionURI;
+ this.remoteId = (String)
wrappedPackage.getInfo().get(DistributionPackageUtils.PROPERTY_REMOTE_PACKAGE_ID);
+ }
+
+
+ public DistributionPackage getPackage() {
+ return wrappedPackage;
+ }
+
+ public void deleteRemotePackage() {
+
+ try {
+ HttpTransportUtils.deletePackage(executor, distributionURI,
remoteId);
+ } catch (URISyntaxException e) {
+ log.error("cannot delete remote package", e);
+ } catch (IOException e) {
+ log.error("cannot delete remote package", e);
+ }
+ }
+}
Modified:
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/transport/impl/DistributionTransport.java
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/transport/impl/DistributionTransport.java?rev=1740843&r1=1740842&r2=1740843&view=diff
==============================================================================
---
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/transport/impl/DistributionTransport.java
(original)
+++
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/transport/impl/DistributionTransport.java
Mon Apr 25 14:20:12 2016
@@ -58,6 +58,6 @@ public interface DistributionTransport {
* fail to be retrieved from the
target instance
*/
@Nullable
- DistributionPackageProxy retrievePackage(@Nonnull ResourceResolver
resourceResolver, @Nonnull DistributionRequest request, @Nonnull
DistributionTransportContext context) throws DistributionException;
+ RemoteDistributionPackage retrievePackage(@Nonnull ResourceResolver
resourceResolver, @Nonnull DistributionRequest request, @Nonnull
DistributionTransportContext context) throws DistributionException;
}
Modified:
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/transport/impl/HttpTransportUtils.java
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/transport/impl/HttpTransportUtils.java?rev=1740843&r1=1740842&r2=1740843&view=diff
==============================================================================
---
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/transport/impl/HttpTransportUtils.java
(original)
+++
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/transport/impl/HttpTransportUtils.java
Mon Apr 25 14:20:12 2016
@@ -38,13 +38,7 @@ public class HttpTransportUtils {
private static final Logger log =
LoggerFactory.getLogger(HttpTransportUtils.class);
- public final static String HEADER_DISTRIBUTION_ORIGINAL_ID =
"X-Distribution-OriginalId";
-
- public static InputStream fetchNextPackage(Executor executor, URI
distributionURI, Map<String, String> headers) throws URISyntaxException,
IOException {
-
- // always clear the result headers map
- headers.clear();
-
+ public static InputStream fetchNextPackage(Executor executor, URI
distributionURI) throws URISyntaxException, IOException {
URI fetchUri = getFetchUri(distributionURI);
Request fetchReq = Request.Post(fetchUri).useExpectContinue();
HttpResponse httpResponse =
executor.execute(fetchReq).returnResponse();
@@ -55,15 +49,6 @@ public class HttpTransportUtils {
HttpEntity entity = httpResponse.getEntity();
-
- Header header =
httpResponse.getFirstHeader(HttpTransportUtils.HEADER_DISTRIBUTION_ORIGINAL_ID);
- if (header != null && header.getValue() != null) {
- String originalId = header.getValue();
- headers.put(HEADER_DISTRIBUTION_ORIGINAL_ID, originalId);
- } else {
- log.warn("cannot retrieve original id header");
- }
-
return entity.getContent();
}
Added:
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/transport/impl/RemoteDistributionPackage.java
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/transport/impl/RemoteDistributionPackage.java?rev=1740843&view=auto
==============================================================================
---
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/transport/impl/RemoteDistributionPackage.java
(added)
+++
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/transport/impl/RemoteDistributionPackage.java
Mon Apr 25 14:20:12 2016
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.sling.distribution.transport.impl;
+
+import org.apache.sling.distribution.serialization.DistributionPackage;
+
+
+public interface RemoteDistributionPackage {
+
+ DistributionPackage getPackage();
+
+ void deleteRemotePackage();
+}
Modified:
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/transport/impl/SimpleHttpDistributionTransport.java
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/transport/impl/SimpleHttpDistributionTransport.java?rev=1740843&r1=1740842&r2=1740843&view=diff
==============================================================================
---
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/transport/impl/SimpleHttpDistributionTransport.java
(original)
+++
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/transport/impl/SimpleHttpDistributionTransport.java
Mon Apr 25 14:20:12 2016
@@ -23,7 +23,6 @@ import javax.annotation.Nullable;
import java.io.InputStream;
import java.net.URI;
import java.util.ArrayList;
-import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
@@ -123,7 +122,7 @@ public class SimpleHttpDistributionTrans
}
@Nullable
- public DistributionPackageProxy retrievePackage(@Nonnull ResourceResolver
resourceResolver, @Nonnull DistributionRequest distributionRequest, @Nonnull
DistributionTransportContext distributionContext) throws DistributionException {
+ public RemoteDistributionPackage retrievePackage(@Nonnull ResourceResolver
resourceResolver, @Nonnull DistributionRequest distributionRequest, @Nonnull
DistributionTransportContext distributionContext) throws DistributionException {
log.debug("pulling from {}", distributionEndpoint.getUri());
List<DistributionPackage> result = new
ArrayList<DistributionPackage>();
@@ -138,11 +137,7 @@ public class SimpleHttpDistributionTrans
// Request req = Request.Post(distributionURI).useExpectContinue();
// TODO : add queue parameter
-
- // continuously requests package streams as long as type header is
received with the response (meaning there's a package of a certain type)
- final Map<String, String> headers = new HashMap<String, String>();
-
- InputStream inputStream =
HttpTransportUtils.fetchNextPackage(executor, distributionURI, headers);
+ InputStream inputStream =
HttpTransportUtils.fetchNextPackage(executor, distributionURI);
if (inputStream == null) {
return null;
@@ -152,9 +147,7 @@ public class SimpleHttpDistributionTrans
responsePackage.getInfo().put(PACKAGE_INFO_PROPERTY_ORIGIN_URI,
distributionURI);
log.debug("pulled package with info {}",
responsePackage.getInfo());
- String originalId =
headers.get(HttpTransportUtils.HEADER_DISTRIBUTION_ORIGINAL_ID);
-
- return new DefaultDistributionPackageProxy(responsePackage,
executor, distributionURI, originalId);
+ return new DefaultRemoteDistributionPackage(responsePackage,
executor, distributionURI);
} catch (HttpHostConnectException e) {
log.debug("could not connect to {} - skipping",
distributionEndpoint.getUri());
} catch (Exception ex) {
Modified:
sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/transport/impl/SimpleHttpDistributionTransportTest.java
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/transport/impl/SimpleHttpDistributionTransportTest.java?rev=1740843&r1=1740842&r2=1740843&view=diff
==============================================================================
---
sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/transport/impl/SimpleHttpDistributionTransportTest.java
(original)
+++
sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/transport/impl/SimpleHttpDistributionTransportTest.java
Mon Apr 25 14:20:12 2016
@@ -104,7 +104,7 @@ public class SimpleHttpDistributionTrans
endpoint, packageBuilder, secretProvider);
ResourceResolver resourceResolver = mock(ResourceResolver.class);
DistributionRequest distributionRequest = new
SimpleDistributionRequest(DistributionRequestType.ADD, "/");
- DistributionPackageProxy retrievedPackage =
simpleHttpDistributionTransport.retrievePackage(resourceResolver,
distributionRequest, new DistributionTransportContext());
+ RemoteDistributionPackage retrievedPackage =
simpleHttpDistributionTransport.retrievePackage(resourceResolver,
distributionRequest, new DistributionTransportContext());
assertNull(retrievedPackage);
}
@@ -139,7 +139,7 @@ public class SimpleHttpDistributionTrans
endpoint, packageBuilder, secretProvider);
ResourceResolver resourceResolver = mock(ResourceResolver.class);
DistributionRequest distributionRequest = new
SimpleDistributionRequest(DistributionRequestType.ADD, "/");
- DistributionPackageProxy retrievedPackage =
simpleHttpDistributionTransport.retrievePackage(resourceResolver,
distributionRequest, new DistributionTransportContext());
+ RemoteDistributionPackage retrievedPackage =
simpleHttpDistributionTransport.retrievePackage(resourceResolver,
distributionRequest, new DistributionTransportContext());
assertNotNull(retrievedPackage);
}
}
\ No newline at end of file