You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by mp...@apache.org on 2016/04/25 16:20:12 UTC
svn commit: r1740843 - in
/sling/trunk/contrib/extensions/distribution/core/src:
main/java/org/apache/sling/distribution/packaging/impl/
main/java/org/apache/sling/distribution/packaging/impl/exporter/
main/java/org/apache/sling/distribution/servlet/ m...
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