Add repository name to failures in HTTP server log
If UploadPack or ReceivePack has an exception record an identifier associated with the repository as part of the log message. This can help the HTTP admin track down the offending repository and take action to repair the root cause. Change-Id: I58f22b33cdb40994f044a26fba9fe965b45be51d
This commit is contained in:
parent
72857c52ec
commit
ae592cc655
|
@ -18,6 +18,7 @@ Bundle-RequiredExecutionEnvironment: JavaSE-1.7
|
||||||
Import-Package: javax.servlet;version="[2.5.0,3.0.0)",
|
Import-Package: javax.servlet;version="[2.5.0,3.0.0)",
|
||||||
javax.servlet.http;version="[2.5.0,3.0.0)",
|
javax.servlet.http;version="[2.5.0,3.0.0)",
|
||||||
org.eclipse.jgit.errors;version="[4.0.0,4.1.0)",
|
org.eclipse.jgit.errors;version="[4.0.0,4.1.0)",
|
||||||
|
org.eclipse.jgit.internal.storage.dfs;version="[4.0.0,4.1.0)",
|
||||||
org.eclipse.jgit.internal.storage.file;version="[4.0.0,4.1.0)",
|
org.eclipse.jgit.internal.storage.file;version="[4.0.0,4.1.0)",
|
||||||
org.eclipse.jgit.lib;version="[4.0.0,4.1.0)",
|
org.eclipse.jgit.lib;version="[4.0.0,4.1.0)",
|
||||||
org.eclipse.jgit.nls;version="[4.0.0,4.1.0)",
|
org.eclipse.jgit.nls;version="[4.0.0,4.1.0)",
|
||||||
|
|
|
@ -11,8 +11,8 @@ encodingNotSupportedByThisLibrary={0} "{1}": not supported by this library.
|
||||||
expectedRepositoryAttribute=Expected Repository attribute
|
expectedRepositoryAttribute=Expected Repository attribute
|
||||||
filterMustNotBeNull=filter must not be null
|
filterMustNotBeNull=filter must not be null
|
||||||
internalServerError=Internal server error
|
internalServerError=Internal server error
|
||||||
internalErrorDuringReceivePack=Internal error during receive-pack
|
internalErrorDuringReceivePack=Internal error during receive-pack to {0}
|
||||||
internalErrorDuringUploadPack=Internal error during upload-pack
|
internalErrorDuringUploadPack=Internal error during upload-pack from {0}
|
||||||
internalServerErrorRequestAttributeWasAlreadySet=Internal server error, request attribute {0} was already set when {1} was invoked.
|
internalServerErrorRequestAttributeWasAlreadySet=Internal server error, request attribute {0} was already set when {1} was invoked.
|
||||||
invalidBoolean=Invalid boolean {0} = {1}
|
invalidBoolean=Invalid boolean {0} = {1}
|
||||||
invalidIndex=Invalid index: {0}
|
invalidIndex=Invalid index: {0}
|
||||||
|
|
|
@ -62,6 +62,7 @@
|
||||||
import static org.eclipse.jgit.util.HttpSupport.HDR_USER_AGENT;
|
import static org.eclipse.jgit.util.HttpSupport.HDR_USER_AGENT;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.text.MessageFormat;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import javax.servlet.Filter;
|
import javax.servlet.Filter;
|
||||||
|
@ -192,14 +193,12 @@ public void flush() throws IOException {
|
||||||
out.close();
|
out.close();
|
||||||
} catch (UnpackException e) {
|
} catch (UnpackException e) {
|
||||||
// This should be already reported to the client.
|
// This should be already reported to the client.
|
||||||
getServletContext().log(
|
log(rp.getRepository(), e.getCause());
|
||||||
HttpServerText.get().internalErrorDuringReceivePack,
|
|
||||||
e.getCause());
|
|
||||||
consumeRequestBody(req);
|
consumeRequestBody(req);
|
||||||
out.close();
|
out.close();
|
||||||
|
|
||||||
} catch (Throwable e) {
|
} catch (Throwable e) {
|
||||||
getServletContext().log(HttpServerText.get().internalErrorDuringReceivePack, e);
|
log(rp.getRepository(), e);
|
||||||
if (!rsp.isCommitted()) {
|
if (!rsp.isCommitted()) {
|
||||||
rsp.reset();
|
rsp.reset();
|
||||||
sendError(req, rsp, SC_INTERNAL_SERVER_ERROR);
|
sendError(req, rsp, SC_INTERNAL_SERVER_ERROR);
|
||||||
|
@ -207,4 +206,10 @@ public void flush() throws IOException {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void log(Repository git, Throwable e) {
|
||||||
|
getServletContext().log(MessageFormat.format(
|
||||||
|
HttpServerText.get().internalErrorDuringReceivePack,
|
||||||
|
ServletUtils.identify(git)), e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -62,6 +62,7 @@
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
|
||||||
|
import org.eclipse.jgit.internal.storage.dfs.DfsRepository;
|
||||||
import org.eclipse.jgit.lib.Constants;
|
import org.eclipse.jgit.lib.Constants;
|
||||||
import org.eclipse.jgit.lib.ObjectId;
|
import org.eclipse.jgit.lib.ObjectId;
|
||||||
import org.eclipse.jgit.lib.Repository;
|
import org.eclipse.jgit.lib.Repository;
|
||||||
|
@ -273,6 +274,15 @@ private static String etag(final byte[] content) {
|
||||||
return ObjectId.fromRaw(md.digest()).getName();
|
return ObjectId.fromRaw(md.digest()).getName();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static String identify(Repository git) {
|
||||||
|
if (git instanceof DfsRepository) {
|
||||||
|
return ((DfsRepository) git).getDescription().getRepositoryName();
|
||||||
|
} else if (git.getDirectory() != null) {
|
||||||
|
return git.getDirectory().getPath();
|
||||||
|
}
|
||||||
|
return "unknown";
|
||||||
|
}
|
||||||
|
|
||||||
private ServletUtils() {
|
private ServletUtils() {
|
||||||
// static utility class only
|
// static utility class only
|
||||||
}
|
}
|
||||||
|
|
|
@ -61,6 +61,7 @@
|
||||||
import static org.eclipse.jgit.util.HttpSupport.HDR_USER_AGENT;
|
import static org.eclipse.jgit.util.HttpSupport.HDR_USER_AGENT;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.text.MessageFormat;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import javax.servlet.Filter;
|
import javax.servlet.Filter;
|
||||||
|
@ -76,9 +77,9 @@
|
||||||
import org.eclipse.jgit.lib.Repository;
|
import org.eclipse.jgit.lib.Repository;
|
||||||
import org.eclipse.jgit.transport.InternalHttpServerGlue;
|
import org.eclipse.jgit.transport.InternalHttpServerGlue;
|
||||||
import org.eclipse.jgit.transport.RefAdvertiser.PacketLineOutRefAdvertiser;
|
import org.eclipse.jgit.transport.RefAdvertiser.PacketLineOutRefAdvertiser;
|
||||||
|
import org.eclipse.jgit.transport.ServiceMayNotContinueException;
|
||||||
import org.eclipse.jgit.transport.UploadPack;
|
import org.eclipse.jgit.transport.UploadPack;
|
||||||
import org.eclipse.jgit.transport.UploadPackInternalServerErrorException;
|
import org.eclipse.jgit.transport.UploadPackInternalServerErrorException;
|
||||||
import org.eclipse.jgit.transport.ServiceMayNotContinueException;
|
|
||||||
import org.eclipse.jgit.transport.resolver.ServiceNotAuthorizedException;
|
import org.eclipse.jgit.transport.resolver.ServiceNotAuthorizedException;
|
||||||
import org.eclipse.jgit.transport.resolver.ServiceNotEnabledException;
|
import org.eclipse.jgit.transport.resolver.ServiceNotEnabledException;
|
||||||
import org.eclipse.jgit.transport.resolver.UploadPackFactory;
|
import org.eclipse.jgit.transport.resolver.UploadPackFactory;
|
||||||
|
@ -203,14 +204,12 @@ public void flush() throws IOException {
|
||||||
|
|
||||||
} catch (UploadPackInternalServerErrorException e) {
|
} catch (UploadPackInternalServerErrorException e) {
|
||||||
// Special case exception, error message was sent to client.
|
// Special case exception, error message was sent to client.
|
||||||
getServletContext().log(
|
log(up.getRepository(), e.getCause());
|
||||||
HttpServerText.get().internalErrorDuringUploadPack,
|
|
||||||
e.getCause());
|
|
||||||
consumeRequestBody(req);
|
consumeRequestBody(req);
|
||||||
out.close();
|
out.close();
|
||||||
|
|
||||||
} catch (Throwable e) {
|
} catch (Throwable e) {
|
||||||
getServletContext().log(HttpServerText.get().internalErrorDuringUploadPack, e);
|
log(up.getRepository(), e);
|
||||||
if (!rsp.isCommitted()) {
|
if (!rsp.isCommitted()) {
|
||||||
rsp.reset();
|
rsp.reset();
|
||||||
sendError(req, rsp, SC_INTERNAL_SERVER_ERROR);
|
sendError(req, rsp, SC_INTERNAL_SERVER_ERROR);
|
||||||
|
@ -218,4 +217,10 @@ public void flush() throws IOException {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void log(Repository git, Throwable e) {
|
||||||
|
getServletContext().log(MessageFormat.format(
|
||||||
|
HttpServerText.get().internalErrorDuringUploadPack,
|
||||||
|
ServletUtils.identify(git)), e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -57,7 +57,9 @@ Export-Package: org.eclipse.jgit.api;version="4.0.0";
|
||||||
org.eclipse.jgit.ignore;version="4.0.0",
|
org.eclipse.jgit.ignore;version="4.0.0",
|
||||||
org.eclipse.jgit.ignore.internal;version="4.0.0";x-friends:="org.eclipse.jgit.test",
|
org.eclipse.jgit.ignore.internal;version="4.0.0";x-friends:="org.eclipse.jgit.test",
|
||||||
org.eclipse.jgit.internal;version="4.0.0";x-friends:="org.eclipse.jgit.test,org.eclipse.jgit.http.test",
|
org.eclipse.jgit.internal;version="4.0.0";x-friends:="org.eclipse.jgit.test,org.eclipse.jgit.http.test",
|
||||||
org.eclipse.jgit.internal.storage.dfs;version="4.0.0";x-friends:="org.eclipse.jgit.test",
|
org.eclipse.jgit.internal.storage.dfs;version="4.0.0";
|
||||||
|
x-friends:="org.eclipse.jgit.test,
|
||||||
|
org.eclipse.jgit.http.server",
|
||||||
org.eclipse.jgit.internal.storage.file;version="4.0.0";
|
org.eclipse.jgit.internal.storage.file;version="4.0.0";
|
||||||
x-friends:="org.eclipse.jgit.test,
|
x-friends:="org.eclipse.jgit.test,
|
||||||
org.eclipse.jgit.junit,
|
org.eclipse.jgit.junit,
|
||||||
|
|
Loading…
Reference in New Issue