[GitHub] milleruntime commented on issue #289: ACCUMULO-4677 Sanitizing PathParam values in REST-based Monitor
milleruntime commented on issue #289: ACCUMULO-4677 Sanitizing PathParam values in REST-based Monitor URL: https://github.com/apache/accumulo/pull/289#issuecomment-347701597 I think i fixed the dependency issues with test pom with d3cf72f but the WevViewsiT is still failing. This is an automated message from the Apache Git Service. To respond to the message, please log on GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org With regards, Apache Git Services
[GitHub] mikewalch closed pull request #41: ACCUMULO-4734 Updated syntax highlighting
mikewalch closed pull request #41: ACCUMULO-4734 Updated syntax highlighting URL: https://github.com/apache/accumulo-website/pull/41 This is a PR merged from a forked repository. As GitHub hides the original diff on merge, it is displayed below for the sake of provenance: As this is a foreign pull request (from a fork), the diff is supplied below (as it won't show otherwise due to GitHub magic): diff --git a/_sass/_syntax-highlighting.scss b/_sass/_syntax-highlighting.scss index b479b95..a72eb09 100644 --- a/_sass/_syntax-highlighting.scss +++ b/_sass/_syntax-highlighting.scss @@ -1,70 +1,65 @@ -/** - * Syntax highlighting styles - */ -.highlight { -background: #fff; - -.highlighter-rouge & { - background: #f5f5f5; -} - -.c { color: #998; font-style: italic } // Comment -.err { color: #a61717; background-color: #e3d2d2 } // Error -.k { font-weight: bold } // Keyword -.o { font-weight: bold } // Operator -.cm{ color: #998; font-style: italic } // Comment.Multiline -.cp{ color: #999; font-weight: bold } // Comment.Preproc -.c1{ color: #998; font-style: italic } // Comment.Single -.cs{ color: #999; font-weight: bold; font-style: italic } // Comment.Special -.gd{ color: #000; background-color: #fdd } // Generic.Deleted -.gd .x { color: #000; background-color: #faa } // Generic.Deleted.Specific -.ge{ font-style: italic } // Generic.Emph -.gr{ color: #a00 } // Generic.Error -.gh{ color: #999 } // Generic.Heading -.gi{ color: #000; background-color: #dfd } // Generic.Inserted -.gi .x { color: #000; background-color: #afa } // Generic.Inserted.Specific -.go{ color: #888 } // Generic.Output -.gp{ color: #555 } // Generic.Prompt -.gs{ font-weight: bold } // Generic.Strong -.gu{ color: #aaa } // Generic.Subheading -.gt{ color: #a00 } // Generic.Traceback -.kc{ font-weight: bold } // Keyword.Constant -.kd{ font-weight: bold } // Keyword.Declaration -.kp{ font-weight: bold } // Keyword.Pseudo -.kr{ font-weight: bold } // Keyword.Reserved -.kt{ color: #458; font-weight: bold } // Keyword.Type -.m { color: #099 } // Literal.Number -.s { color: #d14 } // Literal.String -.na{ color: #008080 } // Name.Attribute -.nb{ color: #0086B3 } // Name.Builtin -.nc{ color: #458; font-weight: bold } // Name.Class -.no{ color: #008080 } // Name.Constant -.ni{ color: #800080 } // Name.Entity -.ne{ color: #900; font-weight: bold } // Name.Exception -.nf{ color: #900; font-weight: bold } // Name.Function -.nn{ color: #555 } // Name.Namespace -.nt{ color: #80 } // Name.Tag -.nv{ color: #008080 } // Name.Variable -.ow{ font-weight: bold } // Operator.Word -.w { color: #bbb } // Text.Whitespace -.mf{ color: #099 } // Literal.Number.Float -.mh{ color: #099 } // Literal.Number.Hex -.mi{ color: #099 } // Literal.Number.Integer -.mo{ color: #099 } // Literal.Number.Oct -.sb{ color: #d14 } // Literal.String.Backtick -.sc{ color: #d14 } // Literal.String.Char -.sd{ color: #d14 } // Literal.String.Doc -.s2{ color: #d14 } // Literal.String.Double -.se{ color: #d14 } // Literal.String.Escape -.sh{ color: #d14 } // Literal.String.Heredoc -.si{ color: #d14 } // Literal.String.Interpol -.sx{ color: #d14 } // Literal.String.Other -.sr{ color: #009926 } // Literal.String.Regex -.s1{ color: #d14 } // Literal.String.Single -.ss{ color: #990073 } // Literal.String.Symbol -.bp{ color: #999 } // Name.Builtin.Pseudo -.vc{ color: #008080 } // Name.Variable.Class -.vg{ color: #008080 } // Name.Variable.Global -.vi{ color: #008080 } // Name.Variable.Instance -.il{ color: #099 } // Literal.Number.Integer.Long -} +.highlight .hll { background-color: #d6d6d6 } +.highlight { background: #f5f5f5; color: #4d4d4c } +.highlight .c { color: #8e908c } /* Comment */ +.highlight .err { color: #c82829 } /* Error */ +.highlight .k { color: #8959a8 } /* Keyword */ +.highlight .l { color: #f5871f } /* Literal */ +.highlight .n { color: #4d4d4c } /* Name */ +.highlight .o { color: #3e999f } /* Operator */ +.highlight .p { color: #4d4d4c } /* Punctuation */ +.highlight .cm { color: #8e908c } /* Comment.Multiline */ +.highlight .cp { color: #8e908c } /* Comment.Preproc */ +.highlight .c1 { color: #8e908c } /* Comment.Single */ +.highlight .cs { color: #8e908c } /* Comment.Special */ +.highlight .gd { color: #c82829 } /* Generic.Deleted */ +.highlight .ge { font-style: italic } /* Generic.Emph */ +.highlight .gh { color: #4d4d4c; font-weight: bold } /* Generic.Heading */ +.highlight .gi { color: #718c00 } /* Generic.Inserted */ +.highlight .gp { color: #8e908c; font-weight: bold } /*
[GitHub] ctubbsii commented on a change in pull request #326: ACCUMULO-4745 Fixed broken links in tables table on monitor
ctubbsii commented on a change in pull request #326: ACCUMULO-4745 Fixed broken links in tables table on monitor URL: https://github.com/apache/accumulo/pull/326#discussion_r153630572 ## File path: server/monitor/src/main/java/org/apache/accumulo/monitor/rest/tables/TablesResource.java ## @@ -112,6 +112,7 @@ private static TablesList generateTables(TablesList tableNamespace) { for (Entryentry : Tables.getNameToIdMap(HdfsZooInstance.getInstance()).entrySet()) { String tableName = entry.getKey(); Table.ID tableId = entry.getValue(); + String canonicalTableId = tableId.canonicalID(); Review comment: I was thinking this could be deferred to the constructors of `TableInformation`; that way, this class wouldn't need to change at all, and we can keep the `Table.ID` object around as long as possible before it is serialized in `TableInformation`. This is an automated message from the Apache Git Service. To respond to the message, please log on GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org With regards, Apache Git Services
[jira] [Comment Edited] (ACCUMULO-4746) Create Builder for Mutation
[ https://issues.apache.org/jira/browse/ACCUMULO-4746?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16269423#comment-16269423 ] Keith Turner edited comment on ACCUMULO-4746 at 11/28/17 8:43 PM: -- While trying to puzzle through the issues I was running into with ConditionalMutation I thought about this issue more deeply. I came to the conclusion that a builder is not the right path for Mutation. For Key it made more sense because Key had a lot of constructors and no setters. However for mutation, it has all of these put methods. So after creating a mutation with a builder, its possible to call put methods to further change it. This seems silly to me. What is nice about the key builder is that it allows easy mixing of different types. For example its easy to have a byte array for the row, String for the family, and byte array for the qualifier. Currently this is not possible with the mutation put methods. There are put methods for all byte arrays or all strings, but not combinations. Based on the reasons above, I think having a fluent way to mix types for an existing mutation instead of a builder is a better path. If we were designing the API from scratch I think a builder that creates immutable mutations would be the way to go. However that is not an option for the current API. Below is a proposed Fluent API for mutating that easily supports mixing types. {code:java} class Mutation { public interface FamilyStep extends QualifierStep { // TODO other types? QualifierStep family(CharSequence f); QualifierStep family(byte[] f); QualifierStep family(ByteBuffer f); } public interface QualifierStep extends VisibilityStep { // TODO other types? VisibilityStep qualifier(CharSequence q); VisibilityStep qualifier(byte[] q); VisibilityStep qualifier(ByteBuffer q); } public interface VisibilityStep extends TimestampStep { // TODO other types? TimestampStep visibility(CharSequence cv); TimestampStep visibility(byte[] cv); TimestampStep visibility(ByteBuffer cv); TimestampStep visibility(ColumnVisibility cv); } public interface TimestampStep extends MutateStep { MutateStep timestamp(long t); } public interface MutateStep { // TODO other types? void set(byte[] v); void set(ByteBuffer v); void set(CharSequence v); void delete(); } // this could be called put... public FamilyStep mutate() { //TODO implement.. could return a private inner class that implements all interfaces... return null; } } {code} Below is an example of using the new API that shows easily mixing different types {code:java} Mutation m1 = new Mutation("row1"); byte[] fam = new byte[] {42, 21, 7, 9, 3, 34}; ByteBuffer bb = ...; m1.mutate().family(fam).qualifier("q1").set("v1"); m1.mutate().family(fam).qualifier("q2").set(bb); m1.mutate().family(fam).qualifier("q3").delete(); ByteBuffer bb2 = ...; //below is an example of using the existing put method with different types byte[] tmp = new byte[bb2.remaining()]; bb2.put(tmp); // must make all types same, so made all into byte arrays m1.put(fam, "q4".getBytes(StandardCharsets.UTF_8), tmp); {code} was (Author: kturner): While trying to puzzle through the issues I was running into with ConditionalMutation I thought about this issue more deeply. I came to the conclusion that a builder is not the right path for Mutation. For Key it made more sense because Key had a lot of constructors and no setters. However for mutation, it has all of these put methods. So after creating a mutation with a builder, its possible to call put methods to further change it. This seems silly to me. What is nice about the key builder is that it allows easy mixing of different types. For example its easy to have a byte array for the row, String for the family, and byte array for the qualifier. Currently this is not possible with the mutation put methods. There are put methods for all byte arrays or all strings, but not combinations. Based on the reasons above, I think having a fluent way to mix types for an existing mutation instead of a builder is a better path. If we were designing the API from scratch I think a builder that creates immutable mutations would be the way to go. However that is not an option for the current API. Below is a proposed Fluent API for mutating that easily supports mixing types. {code:java} class Mutation { public interface FamilyStep extends QualifierStep { // TODO other types? QualifierStep family(CharSequence f); QualifierStep family(byte[] f); QualifierStep family(ByteBuffer f); } public interface QualifierStep extends VisibilityStep { // TODO other types? VisibilityStep qualifier(CharSequence q); VisibilityStep qualifier(byte[]
[jira] [Commented] (ACCUMULO-4746) Create Builder for Mutation
[ https://issues.apache.org/jira/browse/ACCUMULO-4746?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16269423#comment-16269423 ] Keith Turner commented on ACCUMULO-4746: While trying to puzzle through the issues I was running into with ConditionalMutation I thought about this issue more deeply. I came to the conclusion that a builder is not the right path for Mutation. For Key it made more sense because Key had a lot of constructors and no setters. However for mutation, it has all of these put methods. So after creating a mutation with a builder, its possible to call put methods to further change it. This seems silly to me. What is nice about the key builder is that it allows easy mixing of different types. For example its easy to have a byte array for the row, String for the family, and byte array for the qualifier. Currently this is not possible with the mutation put methods. There are put methods for all byte arrays or all strings, but not combinations. Based on the reasons above, I think having a fluent way to mix types for an existing mutation instead of a builder is a better path. If we were designing the API from scratch I think a builder that creates immutable mutations would be the way to go. However that is not an option for the current API. Below is a proposed Fluent API for mutating that easily supports mixing types. {code:java} class Mutation { public interface FamilyStep extends QualifierStep { // TODO other types? QualifierStep family(CharSequence f); QualifierStep family(byte[] f); QualifierStep family(ByteBuffer f); } public interface QualifierStep extends VisibilityStep { // TODO other types? VisibilityStep qualifier(CharSequence q); VisibilityStep qualifier(byte[] q); VisibilityStep qualifier(ByteBuffer q); } public interface VisibilityStep extends TimestampStep { // TODO other types? TimestampStep visibility(CharSequence cv); TimestampStep visibility(byte[] cv); TimestampStep visibility(ByteBuffer cv); TimestampStep visibility(ColumnVisibility cv); } public interface TimestampStep extends MutateStep { MutateStep timestamp(long t); } public interface MutateStep { // TODO other types? void set(byte[] v); void set(ByteBuffer v); void set(CharSequence v); void delete(); } // this could be called put... public FamilyStep mutate() { //TODO implement.. could return a private inner class that implements all interfaces... return null; } } {code} Below is an example of using the new API that shows easily mixing different types {code:java} Mutation m1 = new Mutation("row1"); byte[] fam = new byte[] {42, 21, 7, 9, 3, 34}; ByteBuffer bb = null; m1.mutate().family(fam).qualifier("q1").set("v1"); m1.mutate().family(fam).qualifier("q2").set(bb); m1.mutate().family(fam).qualifier("q3").delete(); ByteBuffer bb2 = null; //below is an example of using the existing put method with different types byte[] tmp = new byte[bb2.remaining()]; bb2.put(tmp); // must make all types same, so made all into byte arrays m1.put(fam, "q4".getBytes(StandardCharsets.UTF_8), tmp); {code} > Create Builder for Mutation > --- > > Key: ACCUMULO-4746 > URL: https://issues.apache.org/jira/browse/ACCUMULO-4746 > Project: Accumulo > Issue Type: Sub-task > Components: client >Reporter: Keith Turner > Fix For: 2.0.0 > > > Accumulo needs a builder for mutation similar to the one that was added for > Key. -- This message was sent by Atlassian JIRA (v6.4.14#64029)
[GitHub] milleruntime closed pull request #38: Continue tour
milleruntime closed pull request #38: Continue tour URL: https://github.com/apache/accumulo-website/pull/38 This is a PR merged from a forked repository. As GitHub hides the original diff on merge, it is displayed below for the sake of provenance: As this is a foreign pull request (from a fork), the diff is supplied below (as it won't show otherwise due to GitHub magic): diff --git a/_data/tour.yml b/_data/tour.yml index d84b5bb..c7de9ed 100644 --- a/_data/tour.yml +++ b/_data/tour.yml @@ -1,6 +1,12 @@ docs: - getting-started - basic-read-write + - data-model + - data-model-code + - authorizations + - authorizations-code + - ranges-splits - batch-scanner + - batch-scanner-code - conditional-writer - using-iterators diff --git a/tour/authorizations-code.md b/tour/authorizations-code.md new file mode 100644 index 000..04ea47b --- /dev/null +++ b/tour/authorizations-code.md @@ -0,0 +1,64 @@ +--- +title: Authorizations Code +--- +```java +// start writing your code here +// Connect to Mini Accumulo as the root user and create a table called "GothamPD". +Connector conn = mac.getConnector("root", "tourguide"); +conn.tableOperations().create("GothamPD"); + +// Create a "secretIdentity" authorization & visibility +final String secId = "secretIdentity"; +Authorizations auths = new Authorizations(secId); +ColumnVisibility visibility = new ColumnVisibility(secId); + +// Create a user with the "secretIdentity" authorization and grant him read permissions on our table +conn.securityOperations().createLocalUser("commissioner", new PasswordToken("gordanrocks")); +conn.securityOperations().changeUserAuthorizations("commissioner", auths); +conn.securityOperations().grantTablePermission("commissioner", "GothamPD", TablePermission.READ); + +// Create 3 Mutation objects, securing the proper columns. +Mutation mutation1 = new Mutation("id0001"); +mutation1.put("hero","alias", "Batman"); +mutation1.put("hero","name", visibility, "Bruce Wayne"); +mutation1.put("hero","wearsCape?", "true"); +Mutation mutation2 = new Mutation("id0002"); +mutation2.put("hero","alias", "Robin"); +mutation2.put("hero","name", visibility,"Dick Grayson"); +mutation2.put("hero","wearsCape?", "true"); +Mutation mutation3 = new Mutation("id0003"); +mutation3.put("villain","alias", "Joker"); +mutation3.put("villain","name", "Unknown"); +mutation3.put("villain","wearsCape?", "false"); + +// Create a BatchWriter to the GothamPD table and add your mutations to it. +// Once the BatchWriter is closed by the try w/ resources, data will be available to scans. +try(BatchWriter writer = conn.createBatchWriter("GothamPD", new BatchWriterConfig())) { +writer.addMutation(mutation1); +writer.addMutation(mutation2); +writer.addMutation(mutation3); +} + +// Read and print all rows of the commissioner can see. Pass Scanner proper authorizations +Connector commishConn = mac.getConnector("commissioner", "gordanrocks"); +try(Scanner scan = commishConn.createScanner("GothamPD", auths)) { +System.out.println("Gotham Police Department Persons of Interest:"); +for (Map.Entryentry : scan) { +System.out.printf("Key : %-60s Value : %s\n", entry.getKey(), entry.getValue()); +} +} +``` + +The code above will print (timestamp will differ): +```commandline +Gotham Police Department Persons of Interest: +Key : id0001 hero:alias [] 1511900180231 false Value : Batman +Key : id0001 hero:name [secretIdentity] 1511900180231 false Value : Bruce Wayne +Key : id0001 hero:wearsCape? [] 1511900180231 false Value : true +Key : id0002 hero:alias [] 1511900180231 false Value : Robin +Key : id0002 hero:name [secretIdentity] 1511900180231 false Value : Dick Grayson +Key : id0002 hero:wearsCape? [] 1511900180231 false Value : true +Key : id0003 villain:alias [] 1511900180231 false Value : Joker +Key : id0003 villain:name [] 1511900180231 falseValue : Unknown +Key : id0003 villain:wearsCape? [] 1511900180231 false Value : false +``` \ No newline at end of file diff --git a/tour/authorizations.md b/tour/authorizations.md new file mode 100644 index 000..ac45ffe --- /dev/null +++ b/tour/authorizations.md @@ -0,0 +1,46 @@ +--- +title: Authorizations +--- +Authorizations are a set of Strings that enable a user to read protected data. A column visibility is a boolean expression +that is evaluated using the authorizations provided by a scanner. If it evaluates to true, then the data is visible. + +For example: +* Bob scans with authorizations = { IT, User }
[GitHub] milleruntime commented on issue #38: Continue tour
milleruntime commented on issue #38: Continue tour URL: https://github.com/apache/accumulo-website/pull/38#issuecomment-347652061 I am merging this up to the branch so others can continue work on the tour. This is an automated message from the Apache Git Service. To respond to the message, please log on GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org With regards, Apache Git Services
[GitHub] milleruntime commented on issue #289: ACCUMULO-4677 Sanitizing PathParam values in REST-based Monitor
milleruntime commented on issue #289: ACCUMULO-4677 Sanitizing PathParam values in REST-based Monitor URL: https://github.com/apache/accumulo/pull/289#issuecomment-347633985 @glitch If you want me to fix the conflicts for you, just let me know. I can check out the PR, squash and merge it all up since your work looks complete. This is an automated message from the Apache Git Service. To respond to the message, please log on GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org With regards, Apache Git Services
[GitHub] milleruntime commented on issue #289: ACCUMULO-4677 Sanitizing PathParam values in REST-based Monitor
milleruntime commented on issue #289: ACCUMULO-4677 Sanitizing PathParam values in REST-based Monitor URL: https://github.com/apache/accumulo/pull/289#issuecomment-347632590 @glitch Sorry for the conflicts, I had wrapped up ACCUMULO-4739 yesterday but missed a few updates. My changes to WebViews should be isolated to the new method I created though. I will put off the rest of the changes I wanted to make to the Monitor until we can get this merged up. This is an automated message from the Apache Git Service. To respond to the message, please log on GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org With regards, Apache Git Services
[jira] [Commented] (ACCUMULO-4746) Create Builder for Mutation
[ https://issues.apache.org/jira/browse/ACCUMULO-4746?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16269237#comment-16269237 ] Keith Turner commented on ACCUMULO-4746: ConditionalMutation extends Mutation. I am currently experimenting with creating a builder API for ConditionalMutation that uses the proposed API above. I am running into some issues. > Create Builder for Mutation > --- > > Key: ACCUMULO-4746 > URL: https://issues.apache.org/jira/browse/ACCUMULO-4746 > Project: Accumulo > Issue Type: Sub-task > Components: client >Reporter: Keith Turner > Fix For: 2.0.0 > > > Accumulo needs a builder for mutation similar to the one that was added for > Key. -- This message was sent by Atlassian JIRA (v6.4.14#64029)
[jira] [Comment Edited] (ACCUMULO-4746) Create Builder for Mutation
[ https://issues.apache.org/jira/browse/ACCUMULO-4746?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16269132#comment-16269132 ] Keith Turner edited comment on ACCUMULO-4746 at 11/28/17 5:47 PM: -- I was experimenting with an API for this builder and came up with the following. {code:java} class Mutation { public interface Builder extends QualifierStep { // TODO other types QualifierStep family(CharSequence f); public Mutation build(); } public interface QualifierStep extends VisibilityStep { // TODO other types VisibilityStep qualifier(CharSequence q); } public interface VisibilityStep extends TimestampStep { // TODO other types TimestampStep visibility(CharSequence v); } public interface TimestampStep extends MutateStep { // TODO other types MutateStep timestamp(long t); } public interface MutateStep { Builder set(CharSequence v); Builder delete(); } //TODO support other types for row public static Builder builder(CharSequence row) { return null; // TODO } } {code} Using the API above, can write code like the following to create mutations. {code:java} Builder builder = Mutation.builder("row1"); builder.family("f1").qualifier("q1").set("v1"); builder.family("f1").qualifier("q2").delete(); builder.qualifier("q1").set("v2"); // empty family Mutation m = builder.build(); Mutation m2 = Mutation.builder("row1") .family("f1").qualifier("q1").set("v1") .family("f1").qualifier("q2").set("v2") .family("f1").qualifier("q3").delete() .family("f2").visibility("A").set("v3") // empty qualifier .family("f3").qualifier("q1").visibility("A|B").timestamp(56).set("v4").build(); } {code} was (Author: kturner): I was experimenting with an API for this builder and came up with the following. {code:java} class Mutation { public interface Builder extends QualifierStep { // TODO other types QualifierStep family(CharSequence f); public Mutation build(); } public interface QualifierStep extends VisibilityStep { // TODO other types VisibilityStep qualifier(CharSequence q); } public interface VisibilityStep extends TimestampStep { // TODO other types TimestampStep visibility(CharSequence v); } public interface TimestampStep extends MutateStep { // TODO other types MutateStep timestamp(long t); } public interface MutateStep { Builder set(CharSequence v); Builder delete(); } //TODO support other types for row public static Builder builder(CharSequence row) { return null; // TODO } } {code} Using the API above, can write code like the following to create mutations. {code:java} Builder builder = Mutation.builder("row1"); builder.family("f1").qualifier("q1").set("v1"); builder.family("f1").qualifier("q2").delete(); builder.qualifier("q1").set("v2"); // empty qualifier Mutation m = builder.build(); Mutation m2 = Mutation.builder("row1") .family("f1").qualifier("q1").set("v1") .family("f1").qualifier("q2").set("v2") .family("f1").qualifier("q3").delete() .family("f2").visibility("A").set("v3") // empty qualifier .family("f3").qualifier("q1").visibility("A|B").timestamp(56).set("v4").build(); } {code} > Create Builder for Mutation > --- > > Key: ACCUMULO-4746 > URL: https://issues.apache.org/jira/browse/ACCUMULO-4746 > Project: Accumulo > Issue Type: Sub-task > Components: client >Reporter: Keith Turner > Fix For: 2.0.0 > > > Accumulo needs a builder for mutation similar to the one that was added for > Key. -- This message was sent by Atlassian JIRA (v6.4.14#64029)
[jira] [Commented] (ACCUMULO-4746) Create Builder for Mutation
[ https://issues.apache.org/jira/browse/ACCUMULO-4746?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16269132#comment-16269132 ] Keith Turner commented on ACCUMULO-4746: I was experimenting with an API for this builder and came up with the following. {code:java} class Mutation { public interface Builder extends QualifierStep { // TODO other types QualifierStep family(CharSequence f); public Mutation build(); } public interface QualifierStep extends VisibilityStep { // TODO other types VisibilityStep qualifier(CharSequence q); } public interface VisibilityStep extends TimestampStep { // TODO other types TimestampStep visibility(CharSequence v); } public interface TimestampStep extends MutateStep { // TODO other types MutateStep timestamp(long t); } public interface MutateStep { Builder set(CharSequence v); Builder delete(); } //TODO support other types for row public static Builder builder(CharSequence row) { return null; // TODO } } {code} Using the API above, can write code like the following to create mutations. {code:java} Builder builder = Mutation.builder("row1"); builder.family("f1").qualifier("q1").set("v1"); builder.family("f1").qualifier("q2").delete(); builder.qualifier("q1").set("v2"); // empty qualifier Mutation m = builder.build(); Mutation m2 = Mutation.builder("row1") .family("f1").qualifier("q1").set("v1") .family("f1").qualifier("q2").set("v2") .family("f1").qualifier("q3").delete() .family("f2").visibility("A").set("v3") // empty qualifier .family("f3").qualifier("q1").visibility("A|B").timestamp(56).set("v4").build(); } {code} > Create Builder for Mutation > --- > > Key: ACCUMULO-4746 > URL: https://issues.apache.org/jira/browse/ACCUMULO-4746 > Project: Accumulo > Issue Type: Sub-task > Components: client >Reporter: Keith Turner > Fix For: 2.0.0 > > > Accumulo needs a builder for mutation similar to the one that was added for > Key. -- This message was sent by Atlassian JIRA (v6.4.14#64029)
[jira] [Created] (ACCUMULO-4746) Create Builder for Mutation
Keith Turner created ACCUMULO-4746: -- Summary: Create Builder for Mutation Key: ACCUMULO-4746 URL: https://issues.apache.org/jira/browse/ACCUMULO-4746 Project: Accumulo Issue Type: Sub-task Reporter: Keith Turner Fix For: 2.0.0 Accumulo needs a builder for mutation similar to the one that was added for Key. -- This message was sent by Atlassian JIRA (v6.4.14#64029)
[GitHub] milleruntime commented on a change in pull request #326: ACCUMULO-4745 Fixed broken links in tables table on monitor
milleruntime commented on a change in pull request #326: ACCUMULO-4745 Fixed broken links in tables table on monitor URL: https://github.com/apache/accumulo/pull/326#discussion_r153568544 ## File path: server/monitor/src/main/java/org/apache/accumulo/monitor/rest/tables/TableInformation.java ## @@ -30,7 +29,7 @@ // Variable names become JSON keys public String tablename; - public Table.ID tableId; + public String tableId; Review comment: Could change the variable name, like you did below. You would probably have to change it on the front end as well though. You could use tableIdString if the other is too long. It is just nice to know you are working with a string and not the Table.ID object. This is an automated message from the Apache Git Service. To respond to the message, please log on GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org With regards, Apache Git Services
[GitHub] jmark99 commented on a change in pull request #327: ACCUMULO-4546 Create default log message for IllegalTableTransitionException
jmark99 commented on a change in pull request #327: ACCUMULO-4546 Create default log message for IllegalTableTransitionException URL: https://github.com/apache/accumulo/pull/327#discussion_r153558081 ## File path: server/base/src/main/java/org/apache/accumulo/server/tables/TableManager.java ## @@ -115,10 +115,22 @@ public TableState getTableState(String tableId) { final TableState oldState; final TableState newState; +final String message; public IllegalTableTransitionException(TableState oldState, TableState newState) { + this(oldState, newState, ""); +} + +public IllegalTableTransitionException(TableState oldState, TableState newState, String message) { this.oldState = oldState; this.newState = newState; + + if (message != null && !message.isEmpty()) Review comment: Thanks, @milleruntime . I like that better. This is an automated message from the Apache Git Service. To respond to the message, please log on GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org With regards, Apache Git Services
[GitHub] jmark99 commented on a change in pull request #327: ACCUMULO-4546 Create default log message for IllegalTableTransitionException
jmark99 commented on a change in pull request #327: ACCUMULO-4546 Create default log message for IllegalTableTransitionException URL: https://github.com/apache/accumulo/pull/327#discussion_r153557966 ## File path: server/base/src/test/java/org/apache/accumulo/server/tables/IllegalTableTransitionExceptionTest.java ## @@ -0,0 +1,59 @@ +/* + * 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.accumulo.server.tables; + +import static org.junit.Assert.assertEquals; + +import org.apache.accumulo.core.master.state.tables.TableState; +import org.apache.accumulo.server.tables.TableManager.IllegalTableTransitionException; +import org.junit.Test; + +public class IllegalTableTransitionExceptionTest { + + final TableState oldState = TableState.ONLINE; + final TableState newState = TableState.OFFLINE; + final String defaultMsg = "Error transitioning from " + oldState + " state to " + newState + " state"; + + @Test + public void testIllegalTableTransitionExceptionMessage() { +String userMessage = null; +try { + userMessage = "User suppled message - Exception from " + oldState + " state to " + newState + " state"; + throw new TableManager.IllegalTableTransitionException(oldState, newState, userMessage); +} catch (IllegalTableTransitionException e) { + assertEquals(userMessage, e.getMessage()); +} + } + + @Test + public void testIllegalTableTransitionExceptionDefaultMessage() { +try { + throw new TableManager.IllegalTableTransitionException(oldState, newState); +} catch (IllegalTableTransitionException e) { + assertEquals(defaultMsg, e.getMessage()); +} + } + + @Test + public void testIllegalTableTransitionExceptionEmptyMessage() { +try { + throw new TableManager.IllegalTableTransitionException(oldState, newState, ""); Review comment: Added additional unit test. This is an automated message from the Apache Git Service. To respond to the message, please log on GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org With regards, Apache Git Services
[jira] [Resolved] (ACCUMULO-4739) Make 3rd party web resources (js, css) location configurable
[ https://issues.apache.org/jira/browse/ACCUMULO-4739?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Michael Miller resolved ACCUMULO-4739. -- Resolution: Fixed > Make 3rd party web resources (js, css) location configurable > > > Key: ACCUMULO-4739 > URL: https://issues.apache.org/jira/browse/ACCUMULO-4739 > Project: Accumulo > Issue Type: Task > Components: monitor >Reporter: Christopher Tubbs >Assignee: Michael Miller >Priority: Blocker > Labels: pull-request-available > Fix For: 2.0.0 > > Time Spent: 4h 40m > Remaining Estimate: 0h > > Currently, in the new monitor for 2.0 (after ACCUMULO-3005), some 3rd party > web resources are accessed via an external CDN. This is suitable in many > cases, but could be problematic for client browsers not currently connected > to the internet or with a cached copy of the resources from the CDN. > These resources include bootstrap and jquery. Flot is also a 3rd party > resource, but is currently bundled with Accumulo and served by the monitor. > The location of these resources should be made configurable, so that they can > be bundled with, and served by, the Accumulo monitor instead of a > internet-based CDN. Making the locations configurable also makes it possible > for users to update, if there's a bug in a particular version of jquery that > the administrator wishes to avoid, or they want to use a different bootstrap > theme, for example. > Any new configuration option added to support making these configurable > should be capable of supporting an arbitrary number of script and stylesheet > resources, and possibly other resource types, as well as any accompanying > integrity/crossorigin attributes for CDN access (see > server/monitor/src/main/resources/templates/default.ftl for current values). > Also, I think the default value should be to point to the CDN, and not the > locally bundled and served resources, so that the browser can take advantage > of any caching for these commonly used resources. This would allow us to > achieve ACCUMULO-2983 by stopping bundling these third party resources, but > still supporting bundling, if needed. > To complete this issue, we basically need 2 things: > # Ensure monitor serves (to a predictable location) whatever arbitrary static > resources it finds on the class path (so users can bundle their own static > resources), and > # Ensure resources are configurable to point to the served versions or > versions in a CDN. -- This message was sent by Atlassian JIRA (v6.4.14#64029)
[GitHub] keith-turner commented on a change in pull request #327: ACCUMULO-4546 Create default log message for IllegalTableTransitionException
keith-turner commented on a change in pull request #327: ACCUMULO-4546 Create default log message for IllegalTableTransitionException URL: https://github.com/apache/accumulo/pull/327#discussion_r153540247 ## File path: server/base/src/test/java/org/apache/accumulo/server/tables/IllegalTableTransitionExceptionTest.java ## @@ -0,0 +1,59 @@ +/* + * 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.accumulo.server.tables; + +import static org.junit.Assert.assertEquals; + +import org.apache.accumulo.core.master.state.tables.TableState; +import org.apache.accumulo.server.tables.TableManager.IllegalTableTransitionException; +import org.junit.Test; + +public class IllegalTableTransitionExceptionTest { + + final TableState oldState = TableState.ONLINE; + final TableState newState = TableState.OFFLINE; + final String defaultMsg = "Error transitioning from " + oldState + " state to " + newState + " state"; + + @Test + public void testIllegalTableTransitionExceptionMessage() { +String userMessage = null; +try { + userMessage = "User suppled message - Exception from " + oldState + " state to " + newState + " state"; + throw new TableManager.IllegalTableTransitionException(oldState, newState, userMessage); +} catch (IllegalTableTransitionException e) { + assertEquals(userMessage, e.getMessage()); +} + } + + @Test + public void testIllegalTableTransitionExceptionDefaultMessage() { +try { + throw new TableManager.IllegalTableTransitionException(oldState, newState); +} catch (IllegalTableTransitionException e) { + assertEquals(defaultMsg, e.getMessage()); +} + } + + @Test + public void testIllegalTableTransitionExceptionEmptyMessage() { +try { + throw new TableManager.IllegalTableTransitionException(oldState, newState, ""); Review comment: I saw both were supported in the code. I was thinking could have test for both. This is an automated message from the Apache Git Service. To respond to the message, please log on GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org With regards, Apache Git Services
[GitHub] milleruntime commented on a change in pull request #327: ACCUMULO-4546 Create default log message for IllegalTableTransitionException
milleruntime commented on a change in pull request #327: ACCUMULO-4546 Create default log message for IllegalTableTransitionException URL: https://github.com/apache/accumulo/pull/327#discussion_r153539758 ## File path: server/base/src/main/java/org/apache/accumulo/server/tables/TableManager.java ## @@ -115,10 +115,22 @@ public TableState getTableState(String tableId) { final TableState oldState; final TableState newState; +final String message; public IllegalTableTransitionException(TableState oldState, TableState newState) { + this(oldState, newState, ""); +} + +public IllegalTableTransitionException(TableState oldState, TableState newState, String message) { this.oldState = oldState; this.newState = newState; + + if (message != null && !message.isEmpty()) Review comment: Could use StringUtils.isNotEmpty() from apache commons. Or even static import it so it just reads if(isNotEmpty(message)) This is an automated message from the Apache Git Service. To respond to the message, please log on GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org With regards, Apache Git Services
[GitHub] jmark99 commented on a change in pull request #327: ACCUMULO-4546 Create default log message for IllegalTableTransitionException
jmark99 commented on a change in pull request #327: ACCUMULO-4546 Create default log message for IllegalTableTransitionException URL: https://github.com/apache/accumulo/pull/327#discussion_r153534009 ## File path: server/base/src/main/java/org/apache/accumulo/server/tables/TableManager.java ## @@ -115,10 +115,21 @@ public TableState getTableState(String tableId) { final TableState oldState; final TableState newState; +final String message; public IllegalTableTransitionException(TableState oldState, TableState newState) { + this(oldState, newState, ""); +} + +public IllegalTableTransitionException(TableState oldState, TableState newState, String message) { this.oldState = oldState; this.newState = newState; + + String defaultMessage = "Error transitioning from " + oldState + " state to " + newState + " state"; Review comment: Yes...done. This is an automated message from the Apache Git Service. To respond to the message, please log on GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org With regards, Apache Git Services
[GitHub] jmark99 commented on a change in pull request #327: ACCUMULO-4546 Create default log message for IllegalTableTransitionException
jmark99 commented on a change in pull request #327: ACCUMULO-4546 Create default log message for IllegalTableTransitionException URL: https://github.com/apache/accumulo/pull/327#discussion_r153532444 ## File path: server/base/src/test/java/org/apache/accumulo/server/tables/IllegalTableTransitionExceptionTest.java ## @@ -0,0 +1,59 @@ +/* + * 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.accumulo.server.tables; + +import static org.junit.Assert.assertEquals; + +import org.apache.accumulo.core.master.state.tables.TableState; +import org.apache.accumulo.server.tables.TableManager.IllegalTableTransitionException; +import org.junit.Test; + +public class IllegalTableTransitionExceptionTest { + + final TableState oldState = TableState.ONLINE; + final TableState newState = TableState.OFFLINE; + final String defaultMsg = "Error transitioning from " + oldState + " state to " + newState + " state"; + + @Test + public void testIllegalTableTransitionExceptionMessage() { +String userMessage = null; +try { + userMessage = "User suppled message - Exception from " + oldState + " state to " + newState + " state"; + throw new TableManager.IllegalTableTransitionException(oldState, newState, userMessage); +} catch (IllegalTableTransitionException e) { + assertEquals(userMessage, e.getMessage()); +} + } + + @Test + public void testIllegalTableTransitionExceptionDefaultMessage() { +try { + throw new TableManager.IllegalTableTransitionException(oldState, newState); +} catch (IllegalTableTransitionException e) { + assertEquals(defaultMsg, e.getMessage()); +} + } + + @Test + public void testIllegalTableTransitionExceptionEmptyMessage() { +try { + throw new TableManager.IllegalTableTransitionException(oldState, newState, ""); Review comment: I went back and forth between null and the empty string. Both will work. I can go with either if you have a preference. This is an automated message from the Apache Git Service. To respond to the message, please log on GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org With regards, Apache Git Services
[GitHub] keith-turner commented on a change in pull request #327: ACCUMULO-4546 Create default log message for IllegalTableTransitionException
keith-turner commented on a change in pull request #327: ACCUMULO-4546 Create default log message for IllegalTableTransitionException URL: https://github.com/apache/accumulo/pull/327#discussion_r153531488 ## File path: server/base/src/main/java/org/apache/accumulo/server/tables/TableManager.java ## @@ -115,10 +115,21 @@ public TableState getTableState(String tableId) { final TableState oldState; final TableState newState; +final String message; public IllegalTableTransitionException(TableState oldState, TableState newState) { + this(oldState, newState, ""); +} + +public IllegalTableTransitionException(TableState oldState, TableState newState, String message) { this.oldState = oldState; this.newState = newState; + + String defaultMessage = "Error transitioning from " + oldState + " state to " + newState + " state"; Review comment: Could this be moved inside the else block? This is an automated message from the Apache Git Service. To respond to the message, please log on GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org With regards, Apache Git Services
[GitHub] keith-turner commented on a change in pull request #327: ACCUMULO-4546 Create default log message for IllegalTableTransitionException
keith-turner commented on a change in pull request #327: ACCUMULO-4546 Create default log message for IllegalTableTransitionException URL: https://github.com/apache/accumulo/pull/327#discussion_r153531327 ## File path: server/base/src/test/java/org/apache/accumulo/server/tables/IllegalTableTransitionExceptionTest.java ## @@ -0,0 +1,59 @@ +/* + * 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.accumulo.server.tables; + +import static org.junit.Assert.assertEquals; + +import org.apache.accumulo.core.master.state.tables.TableState; +import org.apache.accumulo.server.tables.TableManager.IllegalTableTransitionException; +import org.junit.Test; + +public class IllegalTableTransitionExceptionTest { + + final TableState oldState = TableState.ONLINE; + final TableState newState = TableState.OFFLINE; + final String defaultMsg = "Error transitioning from " + oldState + " state to " + newState + " state"; + + @Test + public void testIllegalTableTransitionExceptionMessage() { +String userMessage = null; +try { + userMessage = "User suppled message - Exception from " + oldState + " state to " + newState + " state"; + throw new TableManager.IllegalTableTransitionException(oldState, newState, userMessage); +} catch (IllegalTableTransitionException e) { + assertEquals(userMessage, e.getMessage()); +} + } + + @Test + public void testIllegalTableTransitionExceptionDefaultMessage() { +try { + throw new TableManager.IllegalTableTransitionException(oldState, newState); +} catch (IllegalTableTransitionException e) { + assertEquals(defaultMsg, e.getMessage()); +} + } + + @Test + public void testIllegalTableTransitionExceptionEmptyMessage() { +try { + throw new TableManager.IllegalTableTransitionException(oldState, newState, ""); Review comment: In addition to `""`, could also try null. This is an automated message from the Apache Git Service. To respond to the message, please log on GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org With regards, Apache Git Services
[GitHub] asfgit commented on issue #327: ACCUMULO-4546 Create default log message for IllegalTableTransitionException
asfgit commented on issue #327: ACCUMULO-4546 Create default log message for IllegalTableTransitionException URL: https://github.com/apache/accumulo/pull/327#issuecomment-347564023 Can one of the admins verify this patch? This is an automated message from the Apache Git Service. To respond to the message, please log on GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org With regards, Apache Git Services
[jira] [Updated] (ACCUMULO-4546) IllegalTableTransitionException should include a default message that logs the requested state transition
[ https://issues.apache.org/jira/browse/ACCUMULO-4546?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] ASF GitHub Bot updated ACCUMULO-4546: - Labels: pull-request-available (was: ) > IllegalTableTransitionException should include a default message that logs > the requested state transition > - > > Key: ACCUMULO-4546 > URL: https://issues.apache.org/jira/browse/ACCUMULO-4546 > Project: Accumulo > Issue Type: Bug > Components: server-base >Affects Versions: 1.6.6 >Reporter: John Vines >Assignee: Mark Owens > Labels: pull-request-available > Fix For: 1.7.4, 1.8.2, 2.0.0 > > > While trying to track down the root of an Illegal state transition for a > table, I hit a dead end when the original transition to bring a table online > failed. The IllegalTableTransitionException takes in the old and new states > in the contstructor for the exception, but these states are not used to > construct any sort of message, so this information isn't available in the > logs. We should have a default message for this constructor. -- This message was sent by Atlassian JIRA (v6.4.14#64029)
[GitHub] jmark99 opened a new pull request #327: ACCUMULO-4546 Create default log message for IllegalTableTransitionException
jmark99 opened a new pull request #327: ACCUMULO-4546 Create default log message for IllegalTableTransitionException URL: https://github.com/apache/accumulo/pull/327 ACCUMULO-4546 Updated the IllegalTableTransitionException class within TableManager.java to print a default log message when exception is thrown. User also has option of supplying a custom message. Created unit test. Moved import in AccumuloTest.java to make mvn happy. This is an automated message from the Apache Git Service. To respond to the message, please log on GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org With regards, Apache Git Services
[GitHub] mikewalch commented on issue #41: ACCUMULO-4734 Updated syntax highlighting
mikewalch commented on issue #41: ACCUMULO-4734 Updated syntax highlighting URL: https://github.com/apache/accumulo-website/pull/41#issuecomment-34755 @ctubbsii, this is the color scheme that Apache Fluo uses. @milleruntime, made a comment that it's more readable and I agree. Below is an example of the Fluo syntax highlighting: https://fluo.apache.org/docs/fluo/1.1.0-incubating/applications/ Below is an example of current highlighting: https://accumulo.apache.org/docs/2.0/development/mapreduce This is an automated message from the Apache Git Service. To respond to the message, please log on GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org With regards, Apache Git Services
[jira] [Assigned] (ACCUMULO-4546) IllegalTableTransitionException should include a default message that logs the requested state transition
[ https://issues.apache.org/jira/browse/ACCUMULO-4546?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Mark Owens reassigned ACCUMULO-4546: Assignee: Mark Owens > IllegalTableTransitionException should include a default message that logs > the requested state transition > - > > Key: ACCUMULO-4546 > URL: https://issues.apache.org/jira/browse/ACCUMULO-4546 > Project: Accumulo > Issue Type: Bug > Components: server-base >Affects Versions: 1.6.6 >Reporter: John Vines >Assignee: Mark Owens > Fix For: 1.7.4, 1.8.2, 2.0.0 > > > While trying to track down the root of an Illegal state transition for a > table, I hit a dead end when the original transition to bring a table online > failed. The IllegalTableTransitionException takes in the old and new states > in the contstructor for the exception, but these states are not used to > construct any sort of message, so this information isn't available in the > logs. We should have a default message for this constructor. -- This message was sent by Atlassian JIRA (v6.4.14#64029)