You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by kw...@apache.org on 2016/04/18 19:30:28 UTC
[1/2] lucene-solr:master: LUCENE-7225: Detect nonsense polygon as an
error rather than creating failures.
Repository: lucene-solr
Updated Branches:
refs/heads/master 0ba3e922c -> a7b138317
LUCENE-7225: Detect nonsense polygon as an error rather than creating failures.
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/15f94c55
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/15f94c55
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/15f94c55
Branch: refs/heads/master
Commit: 15f94c550f6919306b269cbf815b0373be7466e2
Parents: aafdc37
Author: Karl Wright <Da...@gmail.com>
Authored: Mon Apr 18 13:28:21 2016 -0400
Committer: Karl Wright <Da...@gmail.com>
Committed: Mon Apr 18 13:28:21 2016 -0400
----------------------------------------------------------------------
.../org/apache/lucene/spatial3d/Geo3DPoint.java | 1 +
.../spatial3d/geom/GeoPolygonFactory.java | 133 ++++++++-----------
.../apache/lucene/spatial3d/TestGeo3DPoint.java | 6 +-
.../lucene/spatial3d/geom/GeoPolygonTest.java | 71 +++++++++-
4 files changed, 131 insertions(+), 80 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/15f94c55/lucene/spatial3d/src/java/org/apache/lucene/spatial3d/Geo3DPoint.java
----------------------------------------------------------------------
diff --git a/lucene/spatial3d/src/java/org/apache/lucene/spatial3d/Geo3DPoint.java b/lucene/spatial3d/src/java/org/apache/lucene/spatial3d/Geo3DPoint.java
index 1a36c3e..7d76a0d 100644
--- a/lucene/spatial3d/src/java/org/apache/lucene/spatial3d/Geo3DPoint.java
+++ b/lucene/spatial3d/src/java/org/apache/lucene/spatial3d/Geo3DPoint.java
@@ -192,6 +192,7 @@ public final class Geo3DPoint extends Field {
for (final Polygon hole : theHoles) {
holeList.add(fromPolygon(hole, !reverseMe));
}
+
// Now do the polygon itself
final double[] polyLats = polygon.getPolyLats();
final double[] polyLons = polygon.getPolyLons();
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/15f94c55/lucene/spatial3d/src/java/org/apache/lucene/spatial3d/geom/GeoPolygonFactory.java
----------------------------------------------------------------------
diff --git a/lucene/spatial3d/src/java/org/apache/lucene/spatial3d/geom/GeoPolygonFactory.java b/lucene/spatial3d/src/java/org/apache/lucene/spatial3d/geom/GeoPolygonFactory.java
index f177f00..78e0663 100755
--- a/lucene/spatial3d/src/java/org/apache/lucene/spatial3d/geom/GeoPolygonFactory.java
+++ b/lucene/spatial3d/src/java/org/apache/lucene/spatial3d/geom/GeoPolygonFactory.java
@@ -62,6 +62,7 @@ public class GeoPolygonFactory {
public static GeoPolygon makeGeoPolygon(final PlanetModel planetModel,
final List<GeoPoint> pointList,
final List<GeoPolygon> holes) {
+ //System.err.println("points="+pointList);
// Create a random number generator. Effectively this furnishes us with a repeatable sequence
// of points to use for poles.
final Random generator = new Random(1234);
@@ -105,17 +106,20 @@ public class GeoPolygonFactory {
// We don't know if this is the correct siding choice. We will only know as we build the complex polygon.
// So we need to be prepared to try both possibilities.
GeoCompositePolygon rval = new GeoCompositePolygon();
- if (buildPolygonShape(rval, planetModel, filteredPointList, new BitSet(), 0, 1, initialPlane, holes, testPoint) == false) {
+ MutableBoolean seenConcave = new MutableBoolean();
+ if (buildPolygonShape(rval, seenConcave, planetModel, filteredPointList, new BitSet(), 0, 1, initialPlane, holes, testPoint) == false) {
// The testPoint was within the shape. Was that intended?
if (testPointInside) {
// Yes: build it for real
rval = new GeoCompositePolygon();
- buildPolygonShape(rval, planetModel, filteredPointList, new BitSet(), 0, 1, initialPlane, holes, null);
+ seenConcave = new MutableBoolean();
+ buildPolygonShape(rval, seenConcave, planetModel, filteredPointList, new BitSet(), 0, 1, initialPlane, holes, null);
return rval;
}
// No: do the complement and return that.
rval = new GeoCompositePolygon();
- buildPolygonShape(rval, planetModel, filteredPointList, new BitSet(), 0, 1, new SidedPlane(initialPlane), holes, null);
+ seenConcave = new MutableBoolean();
+ buildPolygonShape(rval, seenConcave, planetModel, filteredPointList, new BitSet(), 0, 1, new SidedPlane(initialPlane), holes, null);
return rval;
} else {
// The testPoint was outside the shape. Was that intended?
@@ -125,7 +129,8 @@ public class GeoPolygonFactory {
}
// No: return the complement
rval = new GeoCompositePolygon();
- buildPolygonShape(rval, planetModel, filteredPointList, new BitSet(), 0, 1, new SidedPlane(initialPlane), holes, null);
+ seenConcave = new MutableBoolean();
+ buildPolygonShape(rval, seenConcave, planetModel, filteredPointList, new BitSet(), 0, 1, new SidedPlane(initialPlane), holes, null);
return rval;
}
}
@@ -400,6 +405,7 @@ public class GeoPolygonFactory {
/** Build a GeoPolygon out of one concave part and multiple convex parts given points, starting edge, and whether starting edge is internal or not.
* @param rval is the composite polygon to add to.
+ * @param seenConcave is true if a concave polygon has been seen in this generation yet.
* @param planetModel is the planet model.
* @param pointsList is a list of the GeoPoints to build an arbitrary polygon out of.
* @param internalEdges specifies which edges are internal.
@@ -419,8 +425,9 @@ public class GeoPolygonFactory {
* found in the interior of the shape we create here we return false, which is a signal that we chose
* our initial plane sidedness backwards.
*/
- public static boolean buildPolygonShape(
+ static boolean buildPolygonShape(
final GeoCompositePolygon rval,
+ final MutableBoolean seenConcave,
final PlanetModel planetModel,
final List<GeoPoint> pointsList,
final BitSet internalEdges,
@@ -433,7 +440,8 @@ public class GeoPolygonFactory {
// It could be the case that we need a concave polygon. So we need to try and look for that case
// as part of the general code for constructing complex polygons.
- // Note that there can be only one concave polygon.
+ // Note that there can be only one concave polygon. This code will enforce that condition and will return
+ // false if it is violated.
// The code here must keep track of two lists of sided planes. The first list contains the planes consistent with
// a concave polygon. This list will grow and shrink. The second list is built starting at the current edge that
@@ -585,30 +593,18 @@ public class GeoPolygonFactory {
// This should be the only problematic part of the polygon.
// We know that thePoint is on the "wrong" side of the edge -- that is, it's on the side that the
// edge is pointing at.
- final List<GeoPoint> thirdPartPoints = new ArrayList<>();
+ final List<GeoPoint> thirdPartPoints = new ArrayList<>(3);
final BitSet thirdPartInternal = new BitSet();
thirdPartPoints.add(checkEdge.startPoint);
thirdPartInternal.set(0, checkEdge.isInternal);
thirdPartPoints.add(checkEdge.endPoint);
thirdPartInternal.set(1, true);
thirdPartPoints.add(thePoint);
- thirdPartInternal.set(2, true);
- //System.out.println("Doing convex part...");
- if (buildPolygonShape(rval,
- planetModel,
- thirdPartPoints,
- thirdPartInternal,
- 0,
- 1,
- checkEdge.plane,
- holes,
- testPoint) == false) {
- return false;
- }
- //System.out.println("...done convex part.");
+ assert checkEdge.plane.isWithin(thePoint) : "Point was on wrong side of complementary plane, so must be on the right side of the non-complementary plane!";
+ final GeoPolygon convexPart = new GeoConvexPolygon(planetModel, thirdPartPoints, holes, thirdPartInternal, true);
+ //System.out.println("convex part = "+convexPart);
+ rval.addShape(convexPart);
- // ??? check if we get the sense right
-
// The part preceding the bad edge, back to thePoint, needs to be recursively
// processed. So, assemble what we need, which is basically a list of edges.
Edge loopEdge = edgeBuffer.getPrevious(checkEdge);
@@ -626,6 +622,7 @@ public class GeoPolygonFactory {
firstPartInternal.set(i, true);
//System.out.println("Doing first part...");
if (buildPolygonShape(rval,
+ seenConcave,
planetModel,
firstPartPoints,
firstPartInternal,
@@ -653,6 +650,7 @@ public class GeoPolygonFactory {
secondPartInternal.set(i, true);
//System.out.println("Doing second part...");
if (buildPolygonShape(rval,
+ seenConcave,
planetModel,
secondPartPoints,
secondPartInternal,
@@ -673,7 +671,8 @@ public class GeoPolygonFactory {
// No violations found: we know it's a legal concave polygon.
// If there's anything left in the edge buffer, convert to concave polygon.
- if (makeConcavePolygon(planetModel, rval, edgeBuffer, holes, testPoint) == false) {
+ //System.out.println("adding concave part");
+ if (makeConcavePolygon(planetModel, rval, seenConcave, edgeBuffer, holes, testPoint) == false) {
return false;
}
@@ -684,6 +683,7 @@ public class GeoPolygonFactory {
* By this point, if there are any edges in the edgebuffer, they represent a concave polygon.
* @param planetModel is the planet model.
* @param rval is the composite polygon we're building.
+ * @param seenConcave is true if we've already seen a concave polygon.
* @param edgeBuffer is the edge buffer.
* @param holes is the optional list of holes.
* @param testPoint is the optional test point.
@@ -691,13 +691,21 @@ public class GeoPolygonFactory {
*/
private static boolean makeConcavePolygon(final PlanetModel planetModel,
final GeoCompositePolygon rval,
+ final MutableBoolean seenConcave,
final EdgeBuffer edgeBuffer,
final List<GeoPolygon> holes,
final GeoPoint testPoint) {
+
if (edgeBuffer.size() == 0) {
return true;
}
+ if (seenConcave.value) {
+ throw new IllegalArgumentException("Illegal polygon; polygon edges intersect each other");
+ }
+
+ seenConcave.value = true;
+
// If there are less than three edges, something got messed up somehow. Don't know how this
// can happen but check.
if (edgeBuffer.size() < 3) {
@@ -1107,24 +1115,34 @@ public class GeoPolygonFactory {
*/
public EdgeBuffer(final List<GeoPoint> pointList, final BitSet internalEdges, final int startPlaneStartIndex, final int startPlaneEndIndex, final SidedPlane startPlane) {
/*
- System.out.println("Initial points:");
+ System.out.println("Start plane index: "+startPlaneStartIndex+" End plane index: "+startPlaneEndIndex+" Initial points:");
for (final GeoPoint p : pointList) {
System.out.println(" "+p);
}
*/
-
- // We need to detect backtracks, and also situations where someone has tried to stitch together multiple segments into one long arc (> 180 degrees).
- // To do this, every time we extend by a coplanar segment, we compute the total arc distance to the new endpoint, as
- // well as a sum of the arc distances we've accumulated as we march forward. If these two numbers disagree, then
- // we know there has been a backtrack or other anomaly.
- // extend the edge, we compute the distance along the
final Edge startEdge = new Edge(pointList.get(startPlaneStartIndex), pointList.get(startPlaneEndIndex), startPlane, internalEdges.get(startPlaneStartIndex));
// Fill in the EdgeBuffer by walking around creating more stuff
Edge currentEdge = startEdge;
int startIndex = startPlaneStartIndex;
int endIndex = startPlaneEndIndex;
while (true) {
+ /*
+ System.out.println("For plane "+currentEdge.plane+", the following points are in/out:");
+ for (final GeoPoint p: pointList) {
+ System.out.println(" "+p+" is: "+(currentEdge.plane.isWithin(p)?"in":"out"));
+ }
+ */
+
+ // Check termination condition
+ if (currentEdge.endPoint == startEdge.startPoint) {
+ // We finish here. Link the current edge to the start edge, and exit
+ previousEdges.put(startEdge, currentEdge);
+ nextEdges.put(currentEdge, startEdge);
+ edges.add(startEdge);
+ break;
+ }
+
// Compute the next edge
startIndex = endIndex;
endIndex++;
@@ -1134,53 +1152,15 @@ public class GeoPolygonFactory {
// Get the next point
final GeoPoint newPoint = pointList.get(endIndex);
// Build the new edge
- // We have to be sure that the point we use as a check does not lie on the plane.
- // In order to meet that goal, we need to go hunting for a point that meets the criteria. If we don't
- // find one, we've got a linear "polygon" that we cannot use.
-
// We need to know the sidedness of the new plane. The point we're going to be presenting to it has
// a certain relationship with the sided plane we already have for the current edge. If the current edge
// is colinear with the new edge, then we want to maintain the same relationship. If the new edge
// is not colinear, then we can use the new point's relationship with the current edge as our guide.
- final boolean isNewPointWithin;
- final GeoPoint pointToPresent;
- if (currentEdge.plane.evaluateIsZero(newPoint)) {
- // The new point is colinear with the current edge. We'll have to look backwards for the first point that isn't.
- int checkPointIndex = -1;
- // Compute the arc distance before we try to extend, so that we note backtracking when we see it
- //double accumulatedDistance = newPoint.arcDistance(pointList.get(startIndex));
- final Plane checkPlane = new Plane(pointList.get(startIndex), newPoint);
- for (int i = 0; i < pointList.size(); i++) {
- final int index = getLegalIndex(startIndex - 1 - i, pointList.size());
- if (!checkPlane.evaluateIsZero(pointList.get(index))) {
- checkPointIndex = index;
- break;
- } else {
- //accumulatedDistance += pointList.get(getLegalIndex(index+1, pointList.size())).arcDistance(pointList.get(index));
- //final double actualDistance = newPoint.arcDistance(pointList.get(index));
- //if (Math.abs(actualDistance - accumulatedDistance) >= Vector.MINIMUM_RESOLUTION) {
- // throw new IllegalArgumentException("polygon backtracks over itself");
- //}
- }
- }
- if (checkPointIndex == -1) {
- throw new IllegalArgumentException("polygon is illegal (linear)");
- }
- pointToPresent = pointList.get(checkPointIndex);
- isNewPointWithin = currentEdge.plane.isWithin(pointToPresent);
- } else {
- isNewPointWithin = currentEdge.plane.isWithin(newPoint);
- pointToPresent = currentEdge.startPoint;
- }
+ final boolean isNewPointWithin = currentEdge.plane.isWithin(newPoint);
+ final GeoPoint pointToPresent = currentEdge.startPoint;
final SidedPlane newPlane = new SidedPlane(pointToPresent, isNewPointWithin, pointList.get(startIndex), newPoint);
- /*
- System.out.println("For next plane, the following points are in/out:");
- for (final GeoPoint p: pointList) {
- System.out.println(" "+p+" is: "+(newPlane.isWithin(p)?"in":"out"));
- }
- */
final Edge newEdge = new Edge(pointList.get(startIndex), pointList.get(endIndex), newPlane, internalEdges.get(startIndex));
// Link it in
@@ -1189,13 +1169,6 @@ public class GeoPolygonFactory {
edges.add(newEdge);
currentEdge = newEdge;
- if (currentEdge.endPoint == startEdge.startPoint) {
- // We finish here. Link the current edge to the start edge, and exit
- previousEdges.put(startEdge, currentEdge);
- nextEdges.put(currentEdge, startEdge);
- edges.add(startEdge);
- break;
- }
}
oneEdge = startEdge;
@@ -1313,4 +1286,8 @@ public class GeoPolygonFactory {
}
+ static class MutableBoolean {
+ public boolean value = false;
+ }
+
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/15f94c55/lucene/spatial3d/src/test/org/apache/lucene/spatial3d/TestGeo3DPoint.java
----------------------------------------------------------------------
diff --git a/lucene/spatial3d/src/test/org/apache/lucene/spatial3d/TestGeo3DPoint.java b/lucene/spatial3d/src/test/org/apache/lucene/spatial3d/TestGeo3DPoint.java
index 770ae4d..b9532f8 100644
--- a/lucene/spatial3d/src/test/org/apache/lucene/spatial3d/TestGeo3DPoint.java
+++ b/lucene/spatial3d/src/test/org/apache/lucene/spatial3d/TestGeo3DPoint.java
@@ -544,10 +544,13 @@ public class TestGeo3DPoint extends LuceneTestCase {
// Polygons
final boolean isClockwise = random().nextDouble() < 0.5;
try {
- return Geo3DPoint.newPolygonQuery(field, makePoly(PlanetModel.WGS84,
+ final Query q = Geo3DPoint.newPolygonQuery(field, makePoly(PlanetModel.WGS84,
new GeoPoint(PlanetModel.WGS84, toRadians(GeoTestUtil.nextLatitude()), toRadians(GeoTestUtil.nextLongitude())),
isClockwise,
true));
+ //System.err.println("Generated: "+q);
+ //assertTrue(false);
+ return q;
} catch (IllegalArgumentException e) {
continue;
}
@@ -880,6 +883,7 @@ public class TestGeo3DPoint extends LuceneTestCase {
* clockwise/counterclockwise rotation that way.
*/
protected static Polygon makePoly(final PlanetModel pm, final GeoPoint pole, final boolean clockwiseDesired, final boolean createHoles) {
+
// Polygon edges will be arranged around the provided pole, and holes will each have a pole selected within the parent
// polygon.
final int pointCount = TestUtil.nextInt(random(), 3, 10);
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/15f94c55/lucene/spatial3d/src/test/org/apache/lucene/spatial3d/geom/GeoPolygonTest.java
----------------------------------------------------------------------
diff --git a/lucene/spatial3d/src/test/org/apache/lucene/spatial3d/geom/GeoPolygonTest.java b/lucene/spatial3d/src/test/org/apache/lucene/spatial3d/geom/GeoPolygonTest.java
index 8f5152e..d3011a1 100755
--- a/lucene/spatial3d/src/test/org/apache/lucene/spatial3d/geom/GeoPolygonTest.java
+++ b/lucene/spatial3d/src/test/org/apache/lucene/spatial3d/geom/GeoPolygonTest.java
@@ -439,7 +439,76 @@ shape:
points.add(new GeoPoint(-0.1699323603224724, 0.8516746480592872, 0.4963385521664198));
points.add(new GeoPoint(0.2654788898359613, 0.7380222309164597, 0.6200740473100581));
- final GeoPolygon p = GeoPolygonFactory.makeGeoPolygon(PlanetModel.WGS84, points, null);
+ boolean illegalArgumentException = false;
+ try {
+ final GeoPolygon p = GeoPolygonFactory.makeGeoPolygon(PlanetModel.WGS84, points, null);
+ } catch (IllegalArgumentException e) {
+ illegalArgumentException = true;
+ }
+ assertTrue(illegalArgumentException);
+ }
+
+ @Test
+ public void testPolygonFactoryCase2() {
+ /*
+ [[lat=-0.48522750470337056, lon=-1.7370471071224087([X=-0.14644023172524287, Y=-0.8727091042681705, Z=-0.4665895520487907])],
+ [lat=-0.4252164254406539, lon=-1.0929282311747601([X=0.41916238097763436, Y=-0.8093435958043177, Z=-0.4127428785664968])],
+ [lat=0.2055150822737076, lon=0.8094775925193464([X=0.6760197133035871, Y=0.7093859395658346, Z=0.20427109186920892])],
+ [lat=-0.504360159046884, lon=-1.27628468850318([X=0.25421329462858633, Y=-0.8380671569889917, Z=-0.4834077932502288])],
+ [lat=-0.11994023948700858, lon=0.07857194136150605([X=0.9908123546871113, Y=0.07801065055912473, Z=-0.11978097184039621])],
+ [lat=0.39346633764155237, lon=1.306697331415816([X=0.24124272064589647, Y=0.8921189226448045, Z=0.3836311592666308])],
+ [lat=-0.07741593942416389, lon=0.5334693210962216([X=0.8594122640512101, Y=0.50755758923985, Z=-0.07742360418968308])],
+ [lat=0.4654236264787552, lon=1.3013260557429494([X=0.2380080413677112, Y=0.8617612419312584, Z=0.4489988990508502])],
+ [lat=-1.2964641581620537, lon=-1.487600369139357([X=0.022467282495493006, Y=-0.26942922375508405, Z=-0.960688317984634])]]
+ */
+ final List<GeoPoint> points = new ArrayList<>();
+ points.add(new GeoPoint(PlanetModel.WGS84, -0.48522750470337056, -1.7370471071224087));
+ points.add(new GeoPoint(PlanetModel.WGS84, -0.4252164254406539, -1.0929282311747601));
+ points.add(new GeoPoint(PlanetModel.WGS84, 0.2055150822737076, 0.8094775925193464));
+ points.add(new GeoPoint(PlanetModel.WGS84, -0.504360159046884, -1.27628468850318));
+ points.add(new GeoPoint(PlanetModel.WGS84, -0.11994023948700858, 0.07857194136150605));
+ points.add(new GeoPoint(PlanetModel.WGS84, 0.39346633764155237, 1.306697331415816));
+ points.add(new GeoPoint(PlanetModel.WGS84, -0.07741593942416389, 0.5334693210962216));
+ points.add(new GeoPoint(PlanetModel.WGS84, 0.4654236264787552, 1.3013260557429494));
+ points.add(new GeoPoint(PlanetModel.WGS84, -1.2964641581620537, -1.487600369139357));
+
+ boolean illegalArgumentException = false;
+ try {
+ final GeoPolygon p = GeoPolygonFactory.makeGeoPolygon(PlanetModel.WGS84, points, null);
+ } catch (IllegalArgumentException e) {
+ illegalArgumentException = true;
+ }
+ assertTrue(illegalArgumentException);
+ }
+
+ @Test
+ public void testPolygonFactoryCase3() {
+ /*
+ This one failed to be detected as convex:
+
+ [junit4] 1> convex part = GeoConvexPolygon: {planetmodel=PlanetModel.WGS84, points=
+ [[lat=0.39346633764155237, lon=1.306697331415816([X=0.24124272064589647, Y=0.8921189226448045, Z=0.3836311592666308])],
+ [lat=-0.4252164254406539, lon=-1.0929282311747601([X=0.41916238097763436, Y=-0.8093435958043177, Z=-0.4127428785664968])],
+ [lat=0.4654236264787552, lon=1.3013260557429494([X=0.2380080413677112, Y=0.8617612419312584, Z=0.4489988990508502])]], internalEdges={0, 1, 2}}
+ */
+ final GeoPoint p3 = new GeoPoint(PlanetModel.WGS84, 0.39346633764155237, 1.306697331415816);
+ final GeoPoint p2 = new GeoPoint(PlanetModel.WGS84, -0.4252164254406539, -1.0929282311747601);
+ final GeoPoint p1 = new GeoPoint(PlanetModel.WGS84, 0.4654236264787552, 1.3013260557429494);
+
+ final List<GeoPoint> points = new ArrayList<>();
+ points.add(p3);
+ points.add(p2);
+ points.add(p1);
+
+ final BitSet internal = new BitSet();
+ final GeoCompositePolygon rval = new GeoCompositePolygon();
+ final GeoPolygonFactory.MutableBoolean mutableBoolean = new GeoPolygonFactory.MutableBoolean();
+
+ boolean result = GeoPolygonFactory.buildPolygonShape(rval, mutableBoolean, PlanetModel.WGS84, points, internal, 0, 1,
+ new SidedPlane(p1, p3, p2), new ArrayList<GeoPolygon>(), null);
+
+ assertFalse(mutableBoolean.value);
+
}
}
[2/2] lucene-solr:master: Merge branch 'master' of
https://git-wip-us.apache.org/repos/asf/lucene-solr
Posted by kw...@apache.org.
Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/lucene-solr
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/a7b13831
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/a7b13831
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/a7b13831
Branch: refs/heads/master
Commit: a7b138317ab38562c4fc511e8ac782b795accfc6
Parents: 15f94c5 0ba3e92
Author: Karl Wright <Da...@gmail.com>
Authored: Mon Apr 18 13:28:30 2016 -0400
Committer: Karl Wright <Da...@gmail.com>
Committed: Mon Apr 18 13:28:30 2016 -0400
----------------------------------------------------------------------
lucene/CHANGES.txt | 4 +
.../org/apache/lucene/geo/TestGeoUtils.java | 78 +--
.../test/org/apache/lucene/geo/TestPolygon.java | 145 +++---
.../lucene/index/Test4GBStoredFields.java | 24 +-
.../lucene/queries/mlt/TestMoreLikeThis.java | 2 +-
.../LegacyNumericRangeQueryBuilder.java | 36 +-
.../xml/builders/PointRangeQueryBuilder.java | 28 +-
.../LegacyNumericRangeQueryWithoutLowerTerm.xml | 31 ++
.../xml/LegacyNumericRangeQueryWithoutRange.xml | 31 ++
.../LegacyNumericRangeQueryWithoutUpperTerm.xml | 31 ++
.../xml/PointRangeQueryWithoutLowerTerm.xml | 31 ++
.../xml/PointRangeQueryWithoutRange.xml | 31 ++
.../xml/PointRangeQueryWithoutUpperTerm.xml | 31 ++
.../lucene/queryparser/xml/TestCoreParser.java | 30 ++
.../geopoint/search/TestGeoPointQuery.java | 20 -
.../search/TestLegacyGeoPointQuery.java | 22 +-
.../codecs/compressing/CompressingCodec.java | 13 +
.../apache/lucene/geo/BaseGeoPointTestCase.java | 141 ++----
.../java/org/apache/lucene/geo/GeoTestUtil.java | 472 ++++++++++++++-----
solr/CHANGES.txt | 3 +
.../org/apache/solr/core/BlobRepository.java | 220 +++++----
.../java/org/apache/solr/core/PluginBag.java | 35 +-
.../src/java/org/apache/solr/core/SolrCore.java | 32 ++
.../solr/configsets/resource-sharing/schema.xml | 25 +
.../configsets/resource-sharing/solrconfig.xml | 51 ++
.../solr/core/BlobRepositoryCloudTest.java | 138 ++++++
.../solr/core/BlobRepositoryMockingTest.java | 165 +++++++
.../apache/solr/core/TestDynamicLoading.java | 4 +-
.../apache/solr/core/TestSolrConfigHandler.java | 2 +-
.../component/ResourceSharingTestComponent.java | 149 ++++++
30 files changed, 1508 insertions(+), 517 deletions(-)
----------------------------------------------------------------------